mongodb - 查询节点的所有后代
问题描述
给定一组具有如下属性“myContacts”的 MongoDb 文档:
{
"_id": 123,
"myContacts" : {
"contacts" : {
"10" : {
"_id" : NumberLong(10),
"name" : "c1",
"prop" : true
},
"20" : {
"_id" : NumberLong(20),
"name" : "c2"
},
}
}
}
我想选择所有文档,其中至少一个联系人缺少“prop”字段。我想出了一个通用查询:
db.getCollection('xyz').find({ 'myContacts.contacts.???.prop': { $exists: false } })
问题是联系人的 ID 是路径的一部分,我无法提前知道它们。我想要 sth like 'myContacts.contacts.$anyChild.prop'
,但在 mongo 文档中找不到类似的东西。
这是否意味着没有办法做到这一点?
PS:我无法更改文档结构,实时应用程序使用它。我在谷歌上花了一些时间,我敢打赌这是不可能的。但是,我希望有使用 Mongo 经验的人发表意见。
解决方案
谢谢大家的有用评论,这让我走了!我可以得到我想要的结果:
db.getCollection('xyz').aggregate([{$project: {_id:1, contacts:{$objectToArray: "$myContacts.contacts"}}}, {$match: {"contacts.v.prop" : null}}])
推荐阅读
- python - ConnectionResetError: [WinError 10054] 现有连接被远程主机错误强行关闭
- c# - IF 奇数/偶数条件检查的行为相反
- python - NameError:名称'self'未定义:Python
- python - 远程计算机上的 Visual Studio 调试
- r - R:根据列值将值从一个数据框复制到另一个数据框
- amazon-web-services - 无法在 Athena 中解析 UTC 日期
- react-native - react-native-webview:混合内容模式不起作用
- matlab - 在 arrayDatastore 上调用 readall 会永远冻结甚至很小的数组
- python - 熊猫:在同一个数据框中组合两行
- r - 使用现有 RData 文件列创建新的 RData 文件