sql >> Database >  >> NoSQL >> MongoDB

Binnen een mongodb $match, hoe te testen op veld MATCHING , in plaats van veld EQUALING

Wat u in de resultaten ziet, is correct. Je aanpak is een beetje verkeerd. Als u de resultaten wilt die u verwacht, moet u deze aanpak gebruiken:

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

Hiermee zou u de volgende uitvoer moeten krijgen:

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

Wanneer u aggregation gebruikt in MongoDB en een aggregatiepijplijn wilt maken die documenten oplevert die u verwacht, moet u uw query altijd met de eerste fase beginnen. En voeg dan eventueel stadia toe om de output van volgende stadia te monitoren.

De uitvoer van uw $unwind fase zou zijn:

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

Als we nu de derde fase opnemen die je hebt gebruikt, dan zou deze overeenkomen met greetings sleutel met een waarde {hello:"world"} en met die exacte waarde zou het slechts twee documenten in de pijplijn vinden. U krijgt dus alleen:

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



  1. Hoe vindt u alle collecties van mangoest

  2. Hoe maak je een staartbare cursor in de MongoDB-shell?

  3. Hoe update/upsert ik een document in Mongoose?

  4. Mongoose find() RegExp voor veld Nummertype