我的文档结构与下面显示的简化版本相同:
{
some_other_props: { ... },
systems: {
sys1: {
score: 24,
metric: 52
},
another_sys: {
score: 9,
metric: 77
},
some_other_sys: {
score: 12,
metric: 5
}
}
}
我想返回score : { "$gte" : 15 }
对于任何子文档都适用的所有文档。
我能想到这样做的唯一方法是在system
中获取密钥列表,并将其连接到某种语句中。但似乎我做错了什么。
我可以重新格式化文档结构,以便每个系统都在自己的文档中......但some_other_props
中有很多其他信息,现在重新格式化会很痛苦。
事实上,我正在尝试做一些更复杂的事情。返回同一系统的score
和metric
之间的差异非常不同的所有文档。但在我能够做到这一点之前,我想确保我可以对子树进行简单的查询,如上所示。
有人可以建议如何查询MongoDB中的子树吗?
答案 0 :(得分:3)
您应该考虑将子文档存储为数组:
{
some_other_props: { ... },
systems:
[ {id: 'sys1',
score: 24,
metric: 52
},
{ id: 'another_sys',
score: 9,
metric: 77
}]
}
然后您可以只查询find 'systems.score' : { '$gte' : 15 }
,如果您认为需要,还可以为'systems.score'构建索引。
答案 1 :(得分:0)
如果你现在正是得分的话,你可以做一个“或”查询:
$or : [{ systems.sys1.score : { "$gte" : 15 } }, {systems.another_sys.score : { "$gte" : 15 }}]
但这似乎是解决问题的一种蹩脚方式。所以我的建议是为system_scores
制作一个不同的目录,它对system_props
集合有多对一的引用。这样可以更容易查询。