sql >> Databáze >  >> NoSQL >> MongoDB

V rámci mongodb $match, jak testovat pole MATCHING , spíše než pole EQUALING

To, co vidíte ve výsledcích, je správné. Tvůj přístup je trochu špatný. Pokud chcete výsledky, které očekáváte, měli byste použít tento přístup:

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

Díky tomu byste měli získat následující výstup:

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

Kdykoli používáte aggregation v MongoDB a chcete vytvořit agregační kanál, který poskytuje dokumenty, které očekáváte, měli byste vždy začít svůj dotaz první fází. A pak případně přidat fáze pro sledování výstupů z následujících fází.

Výstup vašeho $unwind fáze by byla:

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

Pokud nyní zahrneme třetí fázi, kterou jste použili, pak by odpovídala greetings klíč, který má hodnotu {hello:"world"} a s touto přesnou hodnotou by našel pouze dva dokumenty v procesu. Takže byste dostali pouze:

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



  1. Jak nakonfigurujete Embedded MongDB pro testování integrace v aplikaci Spring Boot?

  2. Vrátí mongoose findOne on model slib?

  3. Ovladač Mongo C# aktualizuje konkrétní prvek ve vnořeném poli

  4. Rails:Nesprávný počet argumentů (zadáno 2, očekává se 1) MongoID