sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:hvad er forskellen mellem $elemMatch og $og at finde objekter inde i array?

Jeg vil forklare dette med et eksempel. Overvej samlingen arrays . Den har et felt kaldet arr som er en række indlejrede dokumenter (med felter a og b ).

Nogle dokumenter i arrays samling:

{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 2, "arr" : [ { "a" : "a1", "b" : "b11" }, { "a" : "a2", "b" : "b22" } ] }
{ "_id" : 3, "arr" : [ { "a" : "a2", "b" : "b1" }, { "a" : "a", "b" : "b1" } ] }
{ "_id" : 4, "arr" : [ { "a" : "a1", "b" : "b91" }, { "a" : "a29", "b" : "b1" } ] }

Jeg vil finde alle dokumenter med array-indlejrede-dokument-felterne a="a1" OG b="b1" . Bemærk, at dette skal være inden for det samme element indlejrede dokument i arrayet. Jeg bruger $elemMatch for dette og få det ønskede resultat.

> db.arrays.find( { arr: { $elemMatch: { a: "a1", b: "b1" } } } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }

Hvis jeg nu bruger $og operatør som i følgende forespørgsel, er resultaterne ikke korrekte. Som du kan se, er et ekstra dokument valgt. Forespørgslen fungerede med array-indlejrede-dokument-felterne a="a1" ELLER b="b1" .

> db.arrays.find({$and: [ { "arr.a": "a1" }, { "arr.b": "b1" } ] } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 4, "arr" : [ { "a" : "a1", "b" : "b91" }, { "a" : "a29", "b" : "b1" } ] }

Så ved at bruge $and operatør er IKKE beregnet til dette formål (dvs. at forespørge på flere felter i en række underdokumenter).

Også for at forespørge på et array-indlejret dokumentfelt (kun ét felt ) $elemMatch er ikke påkrævet, for eksempel:

> db.arrays.find( { "arr.a": "a2" } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 2, "arr" : [ { "a" : "a1", "b" : "b11" }, { "a" : "a2", "b" : "b22" } ] }
{ "_id" : 3, "arr" : [ { "a" : "a2", "b" : "b1" }, { "a" : "a", "b" : "b1" } ] }


  1. Solr Mongo/DocDB Delta Import Query virker ikke

  2. Hvordan beregner man forskel mellem værdier af forskellige dokumenter ved hjælp af mongo-aggregering?

  3. konfigurer redis auth på sidekiq

  4. mongod, mac os x - rlimits advarsel