Recupero di un sottoinsieme di dati da MongoDB
-
11-12-2019 - |
Domanda
Se ho una raccolta simile a:
[
{ "test": [ { "a": 1, "b": 2 }, { "a": 10, "b": 1 } ] },
{ "test": [ { "a": 5, "b": 1 }, { "a": 14, "b": 2 } ] },
...
]
.
Come posso ottenere solo un sottoinsieme di dati costituiti dai valori a
quando b
è 2
?In SQL, questo sarebbe qualcosa di simile a:
SELECT test.a FROM collection WHERE test.b = 2
.
Capisco che posso limitare quali dati ottengo con qualcosa come:
collection.find({ }, { "test.a": 1 })
.
Ma questo restituisce tutti i valori a
.Come posso limitarlo in modo che restituisca solo i valori in cui b
è 2
(la parte WHERE test.b = 2
dell'equivalente SQL)?
Soluzione
Puoi farlo aggiungendo un oggetto selettore come primo parametro della chiamata find
e utilizzando $elemMatch
operatore di proiezione:
collection.find({ 'test.b': 2 }, { test: { $elemMatch: { b: 2 } }, 'test.a': 1 })
.
Ma questo restituirà solo il primo elemento Array test
per-DOC in cui b
è 2. È necessario utilizzare il framework di aggregazione se ci possono essere più elementi B: 2 negli array test
.