Javascript 在Mongoose模型中保存修改过的文档(使用修改过的子文档数组)
我目前拥有的代码是:Javascript 在Mongoose模型中保存修改过的文档(使用修改过的子文档数组),javascript,node.js,mongodb,mongoose,nosql,Javascript,Node.js,Mongodb,Mongoose,Nosql,我目前拥有的代码是: User.findOne( { "subUsers.email" : userEmail }, { subUsers : { $elemMatch: { email : userEmail } } }, function(err, user){ if(user){
User.findOne(
{
"subUsers.email" : userEmail
},
{
subUsers : {
$elemMatch: {
email : userEmail }
}
},
function(err, user){
if(user){
var information = user.subUsers[0].information.id(id);
information.arrayA.push({someId : "something"});
user.save(callback(err)); // Also tried information.save()
// without luck
}
callback(err);
}
);
这不会返回任何类型的错误,但是当我检查数据库时,新的数组元素没有被推送(整个文档是完整的)
任何帮助都将不胜感激。谢谢 您可能应该在这里查看第一个常见问题: 在你的例子中,你想添加第三行
var information = user.subUsers[0].information.id(id);
information.arrayA.push({someId : "something"});
user.subUsers.set(0, information);
或者类似的东西。到今天为止,猫鼬还没有准备好以原子的方式进行多级嵌套
因此,即使它返回到一种关系数据库,在这种情况下,最好将嵌套拆分为至少两个集合,并使用自动生成的ObjectId引用。请发布您的模式。我不熟悉mongo,但只是为了防止它与问题有关,
user.save(callback)的回调(err));
可能在回调(err);
结束后被调用。因此,如果有用户,回调可能被调用两次。也许你需要if(user){…}else{callback(err);}
或其他什么的。我肯定忘了一个“else”。仍然没有保存,但谢谢你提醒。)谢谢你的提示。尝试了“set()”和“markModified()”。但他们也没有一个人在工作/我认为您的代码有一个微妙的错误,您可以使用set发布更新的版本吗?即使“set”起作用,在这种情况下也不会有用,因为我使用id()来检索嵌套数组中的元素。看起来我的处境和另一个程序员的处境一样:你知道子文档保存的任何工作示例吗?我将不胜感激。
var information = user.subUsers[0].information.id(id);
information.arrayA.push({someId : "something"});
user.subUsers.set(0, information);