题
如果我有一个类似于:
[
{ "test": [ { "a": 1, "b": 2 }, { "a": 10, "b": 1 } ] },
{ "test": [ { "a": 5, "b": 1 }, { "a": 14, "b": 2 } ] },
...
]
我如何只获得由 a
值时 b
是 2
?在SQL中,这将是类似于:
SELECT test.a FROM collection WHERE test.b = 2
我明白,我可以限制我用类似的东西得到什么数据:
collection.find({ }, { "test.a": 1 })
但这返回了所有的 a
价值观。我怎样才能限制它,以便它只返回其中的值 b
是 2
(该 WHERE test.b = 2
SQL等价物的一部分)?
解决方案
你可以通过添加一个选择器对象作为你的第一个参数来做到这一点。 find
致电及使用 $elemMatch
投影运算符:
collection.find({ 'test.b': 2 }, { test: { $elemMatch: { b: 2 } }, 'test.a': 1 })
但这只会返回第一个 test
每个文档的数组元素 b
是2。您将需要使用聚合框架,如果可以有多个b:2元素在您的 test
数组。
不隶属于 StackOverflow