Express:将文档embedded到现有文档中

我正在开发ExpressNodeMongo应用程序作为数据库。 我有一个收集usersuser可以有多个registered-IDs 。 这就像one-to-many关系。 我想在这样的用户集合中embedded一个document

 post(function (req, res, next) { var pid=req.body.pid; var sid=req.body.sid; var rfname=req.body.rfname; var des=req.body.des; var brand=req.body.brand; var model=req.body.model; var serial=req.body.serial; var location=req.body.location; var arr={pid: 'pid', sid: 'sid', rfname: 'rfname' ,des: 'des', brand: 'brand', model: 'model' ,serial: 'serial', location: 'location'}; mongoose.model('User').findOne({'pemail': req.session.email}, function (err, user){ if(err){ } else { user.registeredId = arr; user.save(function(err){ if(err){ } else { res.render('user/register', {'success': 'dfhlaksdhfh'}); } }) } }); } 

我的用户架构是这样的:

 var mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ email: String, password: String, fname: String, lname: String, plang: String, slang: String, country: String, state: String, city: String, postalcode: String, address1: String, address2: String, pemail: String, semail: String, age: String, gender: String, pphone: String, sphone: String, q1: String, a1: String, q2: String, a2: String, cfname: String, clname: String, cemail: String }); mongoose.model('User', userSchema); 

指导我,我做错了什么,因为它没有在现有文档中embedded文档。 我是否需要在模式中定义,如果是这样,那么如何?

在模式定义中,registryId字段没有被定义,默认情况下,通过strict选项 ,Mongoose确保传递给模型构造器的值在我们的模式中没有被指定,不会被保存到数据库中,因此它不会创build修改文件。

您可以在模式中显式定义字段,也可以在模式定义中将strict选项设置为false:

 // set to false.. var userSchema = new Schema({..}, { strict: false }); 

然后实现findAndModify()方法之一,如findOneAndUpdate()以通过将新对象推送到新的数组字段registeredId来更新您的用户文档。 所以你可以重新写你的postfunction为:

 post(function (req, res, next) { var User = mongoose.model('User'), pid=req.body.pid, sid=req.body.sid, rfname=req.body.rfname, des=req.body.des, brand=req.body.brand, model=req.body.model, serial=req.body.serial, location=req.body.location, arr = { 'pid': pid, 'sid': sid, 'rfname': rfname, 'des': des, 'brand': brand, 'model': model, 'serial': serial, 'location': location }, condition = { 'pemail': req.session.email }, update = { "$push": { 'registeredId': arr } }; User.findOneAndUpdate( condition, update, function (err, doc){ if(err){} else { // doc contains the modified document res.render('user/register', {'success': 'dfhlaksdhfh'}); } } ); }); 
Interesting Posts