Articles of mongoose

如何处理MVC nodejs服务上的angular色(jsonwebtoken,mongoose)

我正在开发一个使用MVC模式的服务,支持NodeJS,jsonwebtoken和MongoDB(mongoose)。 在我的应用程序中,我模拟了两个主要angular色:普通用户(可以通过Facebook,亚马逊或本地注册注册),驱动程序(仅通过网站注册)。 我还要模拟用户和驱动程序之间的交易,只有用户和驱动程序明显可以通过CRUD范例进行修改。 在这里,我发布了用户和驱动程序的模型: var userSchema = mongoose.Schema({ name: String, surname: String, email: String, password: { type: String, required: true } }); var driverSchema = mongoose.Schema({ name: { type: String, required: true }, surname: { type: String, required: true }, email: { type:String, required: true, unique:true }, password: { type: String, required: true, minlength: minimum […]

用Mongoose制作validation器的正确方法是什么?

我有一个userSchema,首先带有自己的validation器的电子邮件,用户名和密码字段。 然后,我想添加更多的领域,如生物,位置性别和生日,也与他们自己的validation。 const userSchema=new Schema({ email: { type: String, required: true, unique: true, lowercase: true, validate: emailValidators}, username: { type: String, required: true, unique: true, lowercase: true, validate: usernameValidators}, password: { type: String, required: true,validate: passwordValidators}, bio: { type:String,required:false,default:null,validate:bioValidators}, location: {type:String,required:false, default:null}, gender: {type:String,required:false,default:null,validate:genderValidators}, birthday: { type:Date,required:false,default:null} }); 现在的问题是,当我想注册,它正在运行每个validation器,所以当然一​​个错误发生,因为在注册页面我甚至不要求生物,位置等。 我试着添加required:false但仍然没有工作,我没有find任何满意的答案 编辑 这是我如何创build一个新的用户 router.post('/register',(req,res)=>{ if (!req.body.email) […]

如何连接各种mongoose结果到一个JSON数组显示在DataTable上?

我需要连接不同的mongoose查询结果到一个数组。 我有一个像branch_data一样的mongoose结果 [ { _id: 59a270e53abb8426805b97fb, client_name: 'Client 1', branch_name: 'Branch 1', router_serial: '111111111', data_card_serial: '11111111', sim_number: '11111111111', modem_serial: '11111111111', idu_serial: '1111111111', dispatch_date: '08/27/2017', status: 'installed', action: 'primary();', __v: 0, ir_report: '201708271241491111111111.xlsx', notes: '111111111111111111', ip_address: '1111111111111', installation_date: '08/01/2017' }, { _id: 59a274045f867701fc07792e, client_name: 'Client 2', branch_name: 'Branch 2', router_serial: '2222222222222', data_card_serial: '22222222', sim_number: '2222222222222', modem_serial: […]

是否有可能使一个asynchronous函数返回一个mongoose查询而不是一个承诺?

build立 假设我们有一些文件Foo和Bar 。 Foo有一个name字段,可以用来识别除了使用文档_id以外的其他文档。 Bar包含对Foo文档的引用。 const fooSchema = new mongoose.Schema({ name: { type: String, unique: true } }); const Foo = <any>mongoose.model<any>('Foo', fooSchema); const barSchema = new mongoose.Schema({ foo: { type: mongoose.Schema.Types.ObjectId, ref: 'Foo' }, date: Date }); const Bar = <any>mongoose.model<any>('Bar', barSchema); 现在假设我们有一个Foo文件的name ,但不是它的_id 。 我们想find所有引用Foo文档的Bar文档。 所以我们编写一个函数,首先find具有给定name的Foo文档,然后使用它来查找Bar文档。 barSchema.statics.findBarWithFooName = async function(name: string) { let […]

如何为Mongo中的一个元素定义一个唯一索引

我想为数组的最后一个元素定义一个唯一索引? 这在mongo中甚至可能吗? 只有status[this.status.length-1].state和user_id对于specific status.state (例如活动)必须是唯一的。 注意:状态数组的最后一个元素定义了用户的当前状态。 例如:2 user_id status[this.status.length-1].state: **revoked**状态可以存在。 但是2个status[this.status.length-1].state: **active** user_id不能存在。 { "_id" : ObjectId("59a609778c6929e7122322cf"), "user_id": '9e2cZ' "status" : [ { "state" : "active", "updatedAt" : ISODate("2017-08-30T21:23:21.158Z"), "createdAt" : ISODate("2017-08-30T21:23:21.158Z") }, { "updatedAt" : ISODate("2017-08-31T22:24:02.613Z"), "createdAt" : ISODate("2017-08-31T22:24:02.613Z"), "state" : "revoked" }, { "updatedAt" : ISODate("2017-08-31T22:25:02.888Z"), "createdAt" : ISODate("2017-08-31T22:25:02.888Z"), "state" : "active" } […]

如何在mongodb中用文件和embedded文档中的“_id”进行sorting?

我有这个文件: { "_id" : ObjectId("5993e9ee92cf241648002a97"), "name" : "test" "subcategories" : [ { "_id" : ObjectId("59953f20f4b8cf0595720e62"), "name" : "subtest", }, { "_id" : ObjectId("59953f20f4b8cf0595720e63"), "name" : "subtest2", } ] }, { "_id" : ObjectId("5993e9ee92cf241648002a98"), "name" : "test2" "subcategories" : [ { "_id" : ObjectId("59953f20f4b8cf0595720e66"), "name" : "subtest3", }, { "_id" : ObjectId("59953f20f4b8cf0595720e69"), "name" : "subtest4", } […]

并行查询使用dynamic集合/模型

这是使用Mongoose和Async 我在一个async.parallel调用中引用了多个函数,他们基本上是这样的: var winston = require('winston'), async = require('async'), //Mongo Models Product = require('../models/product'), Runway = require('../models/runway'), Conversion = require('../models/conversion'), Engagement = require('../models/engagement'); var user = { email: req.params.email }; var score = { product: null, runway: null, conversion: null, engagement: null }; var scoreInfo = 'email score'; findProductByID = function(id, filter, callback) { Product.findOne(id, […]

如何使用$ split运算符进行聚合

我想在date字段上使用$ split运算符。 [{ "status": true, "beaconData" :{ "date" : "15/07/2017, 11:00", "charge" : 15, }, { "status": true, "beaconData" :{ "date" : "2/07/2017, 15:00", "charge" : 35, }, { "status": true, "beaconData" :{ "date" : "2/07/2017, 11:05", "charge" : 5, }] 我曾经这样用过 db.orders.aggregate([{$ project:{data:{$ split:[“$ beaconData.date”,“,”]},'status':1}}]) 但错误返回像 “errmsg”:“exception:无效的操作符'$ split'”, “代码”:15999,

我需要一个mongoose模型或者直接从mongoose那里得到它

我有一个模型在文件models/Model.js是这样的: const mongoose = require('mongoose') const modelSchema = mongoose.Schema({ name: String }) const Model = mongoose.model('Model', modelSchema) module.exports = Model 然后,当我使用它,我像任何其他模块导入它: const Model = require('../models/Model') 我的问题是:如果每次我require一个模块的代码执行(在这种情况下,它会“运行”每次我导入Model.js ),是否更有效率(或至less更有意义)导入它喜欢这个?: const mongoose = require('mongoose') const Model = mongoose.model('Model')

mongoose保存不工作在if语句的第二部分

我在Node / Express API中有一个函数,首先检查我的“Contacts”集合中是否存在“Contact”。 如果是这样,我做一个更新。 如果查询中的电子邮件不存在,则创build一个新电子邮件。 如果联系人存在,contact.save()将起作用。 但是,如果联系人不存在,contact.save()会生成一个错误消息,说“contact.save()不是一个函数。 我不明白我做错了什么。 希望在那里的人能够看到它很容易,给我一些build议。 这里是代码: // SEARCH IF CONTACT EXISTS IN SENDERS CONTACTS – BY OWNERID AND EMAIL IN EMAILS Contact.findOne({'owner_id': req.body.owner_id, 'emails.email_address':req.body.invited_email}, function(err, contact){ if(err) console.log('Error in looking for contact.'); // IF A CONTACT EXISTS — if(contact){ console.log('–> CONTACT FOUND'); // SET CONTACT SHARED INFORMATION contact.shared.invite_id = req.body.invited_first_name […]