如果我有一个类似于:

[
    { "test": [ { "a": 1, "b": 2 }, { "a": 10, "b": 1 } ] },
    { "test": [ { "a": 5, "b": 1 }, { "a": 14, "b": 2 } ] },
    ...
]

我如何只获得由 a 值时 b2?在SQL中,这将是类似于:

SELECT test.a FROM collection WHERE test.b = 2

我明白,我可以限制我用类似的东西得到什么数据:

collection.find({ }, { "test.a": 1 })

但这返回了所有的 a 价值观。我怎样才能限制它,以便它只返回其中的值 b2 (该 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 数组。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top