我有一个漂亮的MongoDB小集合,带有以下对象:
{
"_id" : ObjectId("5919df60adb8170833fb4fa9"),
"a" : [
{
"_id" : ObjectId("5919df60adb8170833fb4faa"),
"b" : {
"c" : true,
"d" : [
{
"e" : "cats",
},
{
"f" : "dogs",
}
]
}
}
]
}
可以通过运行mongo
然后运行以下命令来进行设置:
use cats
db.wonk.insertOne({"_id":ObjectId("5919df60adb8170833fb4fa9"),"a":[{"_id":ObjectId("5919df60adb8170833fb4faa"),"b":{"c":true,"d":[{"e":"cats",},{"f":"dogs",}]}}]})
我想将“ e”的值设置为“喵”,但无法弄清楚如何查询该对象。我以为以下内容可以找到e但没有骰子:
db.wonk.find({a: { $elemMatch: { 'b': { 'd': { $elemMatch: { 'e': 'cats' } } } } }})
我的问题是:如何将e
的值设置为meow
?他人在此问题上提供的任何帮助将不胜感激!
答案 0 :(得分:2)
您可以在此处使用positional filtered operator:
db.wonk.update({ "_id":ObjectId("5919df60adb8170833fb4fa9") },
{ $set: { "a.$[doc1].b.d.$[doc2].e": "meow" } },
{ arrayFilters: [ { "doc1._id": ObjectId("5919df60adb8170833fb4faa") }, { "doc2.e": "cats" } ] })
doc1
和doc2
只是占位符,可以在arrayFilters
内部使用它们来定义MongoDB在遍历文档时使用的条件。