MongoDB からデータのサブセットを取得する
-
11-12-2019 - |
質問
次のようなコレクションがあるとします。
[
{ "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