更新embedded式文件mongoose

我正在寻找一种使用mongoose更新embedded式文档的简单方法,而无需手动设置每个特定字段。 看看这个问题的接受答案,一旦你发现你想更新的embedded式文档,你必须真正设置每个属性,然后保存父。 我更愿意做的是传入一个更新对象,并让MongoDB设置更新。

例如,如果我正在更新常规(非embedded式)文档,我会这样做:

models.User.findOneAndUpdate({_id: req.params.userId}, req.body.user, function(err, user) { err ? resp.status(500).send(err) : user ? resp.send(user) : resp.status(404).send(); }); 

在这里,我实际上并不需要通过req.body.user中的每个属性并设置更改。 我无法find与子文件一起做这种事情的方法吗?

我的模式如下:

 var UserSchema = BaseUserSchema.extend({ isActivated: { type: Boolean, required: true }, files: [FileSchema] }); var FileSchema = new mongoose.Schema( name: { type: String, required: true }, size: { type: Number, required: true }, type: { type: String, required: true }, }); 

我试图根据用户和文件ID来更新文件。

我是否需要创build一个帮助函数来设置值,还是有MongoDB的方式吗?

非常感谢。

假设你有一些东西让你“filedata”在一个variables中,当然还有你正在更新的用户_id,那么你就不需要$set操作符:

 var user = { /* The user information, at least the _id */ var filedata = { /* From somewhere with _id, name, size, type */ }; models.User.findOneAndUdate( { "_id": user._id, "files._id": filedata._id }, { "$set": { "name": filedata.name, "size": filedata.size, "type": filedata.type } }, function(err,user) { // Whatever in here, but the update is already done. } ); 

或者真的,只要你$set你实际上想要“更新”的字段,只要你知道你的意思。 所以,如果你只需要改变“大小”,那么只需设置。