【发布时间】:2014-01-25 15:57:02
【问题描述】:
我试图弄清楚如何更新作为帖子一部分的数组中的项目。 我确实找到了这个看起来最接近我正在寻找的东西:MongoDB Update Array element
但我没有像这个例子似乎显示的那样首先排列特定的帖子。但是我需要先使用 _id 找到特定的帖子,然后从结果帖子中更新数组中的一个项目。
我可以使用一个查询来执行此操作,还是需要先找到该项目然后像另一个答案中显示的示例那样更新它?
在下面的 json 中,我如何更新第一个帖子 cmets: first comment?
编辑:
[{
"_id": "52c06c86b78a091f26000001",
"comments": [
{
"user_id": "52ad97bab142627664000001 ",
"username": "phacer",
"comment": "nice dress!!!",
"created": 1390668491909,
"_id": "_SvF-Ag4d6wFf9QR1KdAdFIpcCyI3cqm2F4rl3w7rdk="
},
{
"user_id": "52ad97bab142627664000001 ",
"username": "phacer",
"comment": "nice dress!!!",
"created": 1390668491909,
"_id": "_SvF-Ag4d6wFf9QR1KdAdFIpcCyI3cqm2F4rl3w7rdk="
}
],
"desc": "Something somethingson",
"hate": [],
"imageurl": "some url",
"love": [
{
"user_id": "52add4f4344e8ca867000001",
"username": "asd",
"created": 1390652212592
}
],
"tags": [
{
"y": 29.3,
"brand": "Zara",
"type": "Bow Tie",
"x": 20,
"color": "Black"
}
],
"user_id": "52add4f4344e8ca867000001"
},
{
"_id": "52c06c86b78a091f26000001",
"comments": [
{
"user_id": "52ad97bab142627664000001 ",
"username": "phacer",
"comment": "nice dress!!!",
"created": 1390668491909,
"_id": "_SvF-Ag4d6wFf9QR1KdAdFIpcCyI3cqm2F4rl3w7rdk="
}
],
"desc": "Something somethingson",
"hate": [],
"imageurl": "some url",
"love": [
{
"user_id": "52add4f4344e8ca867000001",
"username": "asd",
"created": 1390652212592
}
],
"tags": [
{
"y": 29.3,
"brand": "Zara",
"type": "Bow Tie",
"x": 20,
"color": "Black"
}
],
"user_id": "52add4f4344e8ca867000001"
}]
【问题讨论】:
-
您应该能够在一次操作中根据查询更新数组。您为什么不发布一些示例 json 并解释您希望更新做什么,我们也许可以为您发布一个示例。
-
@cirrus 我已经添加了一些 json,谢谢。
-
+1 for $elemMatch - 但如果我有选择的话,我很想将这些 cmets 放入他们自己的集合中。这样我就可以在 user_id、_id 和 post_id 上使用索引。轻松快速地添加和更新。删除一个帖子和所有 cmets 会涉及更多,但我怀疑这是一个不太常见的操作。