0

如果我有一个类似的集合:

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

如何仅获取由a值组成的数据子集 when bis 2?在 SQL 中,这类似于:

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

我明白我可以通过以下方式限制我获得的数据:

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

但这会返回所有a值。如何限制它,使其仅返回bis 2WHERE test.b = 2SQL 等效部分)的值?

4

1 回答 1

2

您可以通过添加选择器对象作为find调用的第一个参数并使用$elemMatch投影运算符来做到这一点:

collection.find({ 'test.b': 2 }, { test: { $elemMatch: { b: 2 } }, 'test.a': 1 })

但这只会返回test每个文档的第一个数组元素,其中b为 2。如果数组中可以有多个 b:2 元素,则需要使用聚合框架test

于 2012-09-29T18:40:32.390 回答