用mongoose更新嵌套对象

我已经search了很多关于嵌套对象的问题,但是我find了与array [s]相关的所有内容。

我正在寻找一个更新简单的mongoose嵌套对象。

从这里http://mongoosejs.com/docs/guide.html

there is an example schema : var blogSchema = new Schema({ title: String, author: String, body: String, comments: [{ body: String, date: Date }], date: { type: Date, default: Date.now }, hidden: Boolean, meta: { votes: Number, favs: Number } }); 

一旦创build一个文件,

我以后怎么改变收益数字?

没有我能find的相同的文件。

这就是我所做的:

 blog.findById(entityId, function(err, mainDoc){ if(err || !mainDoc) return next(err || 'Document not found'); var subDoc = mainDoc['meta']; if(subDoc){ subDoc = _.extend(subDoc, { favs : 56 }); //_ lib already available console.log(mainDoc.get('meta')); //Prints the updated result with favs = 56 OK mainDoc.save(function(err, doc){ console.log(doc.get('meta')); // prints the updated results with favs = 56 OK }); } else next('Not found'); }); 

一切工作文件和所有的控制台给出了预期的结果。

但是当我切换到mongoose控制台和查询文件,我没有得到更新的结果。

我知道还有其他方法可以达到同样的效果,但我只是在寻找我在这个特定代码中做错了什么。

为什么控制台在保存文档后会给数据库提供无与伦比的数据?

在启用mongoosedebugging选项后,我发现在查询中没有这样的数据要更新。 查询用空白$ set触发。 {$ set:{}}

如果你只是想改变favs值,你可以使用一个更简单的查询:

 blog.findByIdAndUpdate(entityId, {$set: {'meta.favs': 56}}, function(err, doc) { console.log(doc); }); 

问题在于,除了发送给客户端之外,您无法使用mongoose获得的数据进行任何操作。

然而,精益的方法使得你可以随时更新信息,并随心所欲地做任何事情。

这看起来像这样:

 blog.findById(entityId).lean().exec(function (err, mainDoc) { if (err || !mainDoc) { return next(err || 'Document not found'); } var subDoc = mainDoc.meta; if(subDoc){ subDoc.favs = 56; blog.update({_id: entityId}, mainDoc, function(err, doc){ console.log(doc.get('meta')); }); } else { next('Not found'); } });