sql >> Base de Datos >  >> NoSQL >> MongoDB

Dentro de una coincidencia de $ mongodb, cómo probar el campo COINCIDENCIA, en lugar del campo IGUALDAD

Lo que estás viendo en los resultados es correcto. Su enfoque es un poco equivocado. Si desea obtener los resultados que espera, debe utilizar este enfoque:

collection.aggregate([
  {$match:{greetings:{$elemMatch:query}}},
  {$unwind:"$greetings"},
  {$match:{"greetings.hello":"world"}},
]).toArray()

Con esto, debería obtener el siguiente resultado:

[
  {greetings:{hello:"world"}},
  {greetings:{hello:"world"}},
  {greetings:{"hello":"world","extra":"data"}
]

Siempre que esté usando aggregation en MongoDB y desea crear una canalización de agregación que produzca los documentos que espera, siempre debe comenzar su consulta con la primera etapa. Y luego eventualmente agregue etapas para monitorear los resultados de las etapas subsiguientes.

La salida de tu $unwind etapa seria:

[{
  greetings:{hello:"world"}
},
{
  greetings:{hello:"world", extra:"data"}
},
{
  greetings:{hello:"world"}
},
{
  greetings:{aloha:"mars"}
}]

Ahora, si incluimos la tercera etapa que usaste, entonces coincidiría con greetings clave que tiene un valor {hello:"world"} y con ese valor exacto, encontraría solo dos documentos en proceso. Así que solo obtendrías:

{ "greetings" : { "hello" : "world" } }
{ "greetings" : { "hello" : "world" } }