質問

次のようなコレクションがあるとします。

[
    { "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