mongoose更新位置/指数数组中的项目
有没有办法更新例如与mongoose数组中的第二个项目?
架构:
title: String, answer: [{ content: String, votes: Number }]
在我的情况下,我想更新第一个或第二个答案,所以它有更多的1票。
我不是mongoose专家 但似乎有一些答案,你可以参考。
所以简单的答案是肯定的,你可以通过指定索引来更新一个数组元素。 在shell中它将是:
db.collection.update({...}, {$inc: {"answer.0.votes": 1}})
其中0
是您要更新的元素的索引。 我相信你可以find相应的语法如何在mongoose写这个。
在我看来,更新一个数组的索引是不是一个好主意。 如果一个元素被删除/插入? 你的embedded式数组元素就像一个RDBMS
一对多关系。 他们应该有一个唯一的标识符像一个ObjectId
更容易定位。 build议的数据结构:
{ title: "This is a question", answer: [{ id: ObjectId("584e6c496c9b4252733ea6fb"), content: "Answer", votes: 0 }] }
并通过id
查询find您投票的确切答案:
db.collection.update({"answer": {$elemMatch: {id: ObjectId("584e6c496c9b4252733ea6fb")}}}, {$inc: {"answer.$.votes": 1}});
其中$
表示数组中的匹配元素。
尝试这个:
Model.findOne({ title: 'your-title' }, function (err, doc){ doc.answer.0.votes.$inc(); // increases votes on first answer by 1 doc.save(); });