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)?

¿Fue útil?

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
scroll top