Emi*_*che 5 mongoose mongodb node.js
有没有办法用猫鼬更新例如数组中的第二项?
架构:
title: String,
answer: [{
content: String,
votes: Number
}]
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我想更新第一个或第二个答案,所以它有 1 票多。
我不是猫鼬专家。但似乎有一些答案可以参考。
所以简短的回答是肯定的,您可以通过指定其索引来更新数组元素。在外壳中,它将是:
db.collection.update({...}, {$inc: {"answer.0.votes": 1}})
Run Code Online (Sandbox Code Playgroud)
0您要更新的元素的索引在哪里。我相信你可以在猫鼬中找到相应的语法来写这个。
在我看来,通过索引更新数组并不是一个好主意。如果删除/插入元素怎么办?您嵌入的数组元素就像RDBMS. 它们应该具有唯一标识符,例如ObjectId以便更容易定位。建议的数据结构:
{
title: "This is a question",
answer: [{
id: ObjectId("584e6c496c9b4252733ea6fb"),
content: "Answer",
votes: 0
}]
}
Run Code Online (Sandbox Code Playgroud)
并查询id以找到您投票的确切答案:
db.collection.update({"answer": {$elemMatch: {id: ObjectId("584e6c496c9b4252733ea6fb")}}}, {$inc: {"answer.$.votes": 1}});
Run Code Online (Sandbox Code Playgroud)
where$表示数组中匹配的元素。
$elemMatch则没有必要。它用于在一个元素中匹配 2 个或多个条件。没有$elemMatch,不同的条件可能会匹配数组中的不同元素。在大多数情况下,这不是预期的。update。