MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

W ramach mongodb $match, jak testować pole MATCHING , a nie pole RÓWNE

To, co widzisz w wynikach, jest prawidłowe. Twoje podejście jest trochę błędne. Jeśli chcesz uzyskać oczekiwane wyniki, powinieneś zastosować następujące podejście:

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

Dzięki temu powinieneś otrzymać następujące wyjście:

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

Zawsze, gdy używasz aggregation w MongoDB i chcesz utworzyć potok agregacji, który dostarcza dokumenty, których oczekujesz, powinieneś zawsze zaczynać zapytanie od pierwszego etapu. A następnie w końcu dodaj etapy, aby monitorować dane wyjściowe z kolejnych etapów.

Wyjście twojego $unwind etap byłby:

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

Teraz, jeśli uwzględnimy trzeci etap, którego użyłeś, pasowałby on do greetings klucz, który ma wartość {hello:"world"} a przy tej dokładnej wartości znalazłby tylko dwa dokumenty w potoku. Więc dostaniesz tylko:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose dołącza do dwóch kolekcji i uzyskuje dane referencyjne w dwóch właściwościach

  2. Wysyłanie zapytań do tablicy tablic w MongoDB

  3. Jak obejść ten problem asynchroniczny MongoDB/Node?

  4. Mongo Zapytanie w wielu polach poddokumentu

  5. Struktura aplikacji synchronicznej w Node.js i MongoDb