
[英]How to update a document to embed an existing document from a different collection in mongoose
[英]Express: Embed document in the existing document
我正在开发Express
, Node
和Mongo
作为数据库的应用程序。 我有一个collection users
,该user
可以具有多个registered-IDs
。 就像one-to-many
关系。 我正在尝试将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);
指导我,我在做什么错,因为它没有将文档嵌入现有文档中。 我是否需要在模式中定义它,如果要定义,那么如何定义?
在您的模式定义中,未定义字段registeredId
,默认情况下通过strict选项 ,Mongoose确保传递给您的模型构造函数的未在我们的模式中指定的值不会保存到数据库,因此不会创建修改后的值。文献。
您可以在架构中显式定义字段,也可以在架构定义中将strict选项设置为false:
// set to false..
var userSchema = new Schema({..}, { strict: false });
然后实现诸如findOneAndUpdate()
类的findAndModify()
方法之一,通过将新对象推送到新的数组字段registeredId
来更新用户文档。 因此,您可以将post函数重写为:
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'});
}
}
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.