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