2

我有一个集合,其中一个字段是子文档。我很困惑 mongodb 如何支持完整子文档上的 $lt、$gt 查询运算符。
样本:

db.test.insert({a:1, subdocA:{x:4, y:7, z:10}, b:10})
db.test.insert({a:9, subdocA:{x:2, y:70, z:5}, b:9})
db.test.insert({a:4, subdocA:{x:8, y:2, z:45}, b:19})

在上面的集合中,我看到 mongodb 支持如下查询:

db.test.find({subdocA:{$lt:{x:6, y:5, z:25}})

事实上,它也支持使用 $gt 运算符的类似查询。它还支持对查询进行排序({subdocA:1})。我想知道它用来比较子文档并因此处理 $lt、$gt 运算符的“逻辑”。

我看到有关如何使用子文档处理精确匹配的 mongodb 文档。但我没有看到任何关于如何使用子文档处理 $lt、$gt 的文档。

谢谢。

4

1 回答 1

1

您必须为每个字段指定运算符,用点 ( .) 命名字段以到达嵌入文档的内部。有关此提示的文档$gt

因此,要查询z低于 20 的子文档,您实际上是搜索subdocA.z低于 20 的,如下所示:

> db.test.find({'subdocA.z':{$lt:20}}, {_id:0})
{ "a" : 1, "subdocA" : { "x" : 4, "y" : 7, "z" : 10 }, "b" : 10 }
{ "a" : 9, "subdocA" : { "x" : 2, "y" : 70, "z" : 5 }, "b" : 9 }

您可以以相同的方式添加其他条件,此处subdocA.x低于 3 :

> db.test.find({'subdocA.z':{$lt:20}, 'subdocA.x':{$lt:3}}, {_id:0})
{ "a" : 9, "subdocA" : { "x" : 2, "y" : 70, "z" : 5 }, "b" : 9 }

最后,您可以混合和匹配“基础”文档中的字段:

> db.test.find({'subdocA.z':{$lt:20}, 'a':{$gt:3}}, {_id:0})
{ "a" : 9, "subdocA" : { "x" : 2, "y" : 70, "z" : 5 }, "b" : 9 }
于 2013-10-24T14:57:40.187 回答