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