【发布时间】:2021-11-12 00:48:00
【问题描述】:
我有一个包含如下文档的集合:
{ keyA1: "stringVal",
keyA2: "stringVal",
keyA3: { keyB1: { feild1: intVal,
feild2: intVal}
keyB2: { feild1: intVal,
feild2: intVal}
}
}
目前 [keyB1, keyB2, ...] 集合是 7 个键,对于集合中的所有文档都是相同的。我想查询特定fields 上的intVals 以获取all keyB's。因此,例如,我可能希望找到所有 field2 的值大于 100 的文档,其中 keyB 属于。
对于任何一个特定的keyB,我只使用点符号:{"keyA3.keyB2.field2": {$gte: 100}}。现在,我可以选择循环遍历所有 keyB,但将来可能不会出现这种情况,因为将来可以添加更多 keyB 值。那时我不想修改代码,并且无论如何都希望避免对这些值进行编码。我还需要相当快的解决方案,因为最终部署预计会有超过 2000 万个文档。
我如何编写一个可以“跳过”点符号中的keyB 字段并只浏览所有嵌入文档的查询?
FWIW,我正在使用 pymongo 在 python 中实现它。谢谢。
【问题讨论】: