我目前的代码是:
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);
}
);
这不会返回任何类型的错误,但是当我检查数据库时,没有推送新的数组元素(整个文档完好无损)。
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
你应该看一下第一个常见问题,在这里:http://mongoosejs.com/docs/faq.html
Mongoose doesn't create getters/setters for array indexes; without them mongoose never gets
notified of the change and so doesn't know to persist the new value. The work-around is to
use [MongooseArray set][1] available in Mongoose >= 3.2.0.
所以在你的情况下,你想要添加第三行
var information = user.subUsers[0].information.id(id);
information.arrayA.push({someId : "something"});
user.subUsers.set(0, information);
或类似的东西。
答案 1 :(得分:0)
截至今天,Mongoose目前尚未准备好以原子方式进行多级嵌套。
因此,即使它返回到一种关系数据库,在这种情况下,最好将嵌套分割为至少2个集合,并使用自动生成的ObjectId进行引用。