mongodb - MongoDB:在嵌套数组中更新
问题描述
我有一个漂亮的小 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' 的值设置为 'meow',但不知道如何查询该对象。我认为以下会找到 e 但没有骰子:
db.wonk.find({a: { $elemMatch: { 'b': { 'd': { $elemMatch: { 'e': 'cats' } } } } }})
我的问题是:如何设置e
to的值meow
?其他人可以在这个问题上提供的任何帮助将不胜感激!
解决方案
您可以在此处使用位置过滤运算符:
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 在遍历文档时使用的条件。
推荐阅读
- tensorflow - 如何使用 keras.ImageDataGenerator() 平衡数据
- gmail-api - Gmail .NET API 功能
- linux - 如何在不合并的情况下强制更改原始主机?
- tensorflow - RNN 文本生成:如何平衡训练/测试丢失与验证丢失?
- android - 应用程序可能在其主线程上做了太多工作。当我午餐 Fragment 或 Activity 并且在它们内部我都在使用 firebase
- python - Python 正则表达式删除括号内的空格
- javascript - 向地图添加标记
- mysql - 创建 Aurora 集群的每日临时克隆
- c++ - Basler 相机和 DIPlib
- python - 我的熊猫数据框中有一些嵌套 JSON 格式的列。我需要删除所有垃圾并使用 key:"name" 保留值