Recuperando un subconjunto de datos de MongoDB
-
11-12-2019 - |
Pregunta
Si tengo una colección similar a:
[
{ "test": [ { "a": 1, "b": 2 }, { "a": 10, "b": 1 } ] },
{ "test": [ { "a": 5, "b": 1 }, { "a": 14, "b": 2 } ] },
...
]
¿Cómo obtengo solo un subconjunto de datos que consta de a
valores cuando b
es 2
?En SQL, esto sería algo similar a:
SELECT test.a FROM collection WHERE test.b = 2
Entiendo que puedo limitar los datos que obtengo con algo como:
collection.find({ }, { "test.a": 1 })
Pero eso devuelve todo el a
valores.¿Cómo puedo limitarlo para que devuelva sólo los valores en los que b
es 2
(el WHERE test.b = 2
parte del equivalente de SQL)?
Solución
Puede hacer esto agregando un objeto selector como primer parámetro de su find
llamar y usar el $elemMatch
operador de proyección:
collection.find({ 'test.b': 2 }, { test: { $elemMatch: { b: 2 } }, 'test.a': 1 })
Pero esto sólo devolverá el primero. test
elemento de matriz por documento donde b
es 2.Necesitará utilizar el marco de agregación si puede haber varios elementos b:2 en su test
matrices.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow