如果我的收藏类似于:
[
{ "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
{SQL等价物的WHERE test.b = 2
部分的值?
答案 0 :(得分:2)
您可以通过添加选择器对象作为find
调用的第一个参数并使用$elemMatch
投影操作符来执行此操作:
collection.find({ 'test.b': 2 }, { test: { $elemMatch: { b: 2 } }, 'test.a': 1 })
但是这只会返回test
数据元素为每个文档b
为2.如果{{{}}中有多个b:2元素,则需要使用聚合框架1}}数组。