在Mongoose模型中保存一个修改后的文档(带有修改后的子文档数组)

我现在的代码是:

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); } ); 

这不会返回任何types的错误,但是当我检查数据库时,新的数组元素没有被推(整个文档是完整的)。

任何帮助将非常感激。 谢谢!

你可能应该检查出第一个常见问题,在这里: 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); 

或类似的东西。

截至今天,mongoose目前还没有准备好以primefaces方式进行多层嵌套。

因此,即使它返回到一种关系数据库,在这种情况下,最好将嵌套拆分为至less2个集合,并使用自动生成的ObjectId进行引用。