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

Angiv flere kriterier for matrixelementer

For at forstå, hvad dokumentationen siger, skal du først forstå, hvordan rækkeviddeforespørgsel med array fungerer.

Antag, at du har følgende dokument i din samling:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

Den første forespørgsel:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Vil kun returnere dokumentet, hvor "færdig" er et array. Dette er fordi $elemMatch operator matcher kun dokumenter, hvor feltet er et array, og hvor et enkelt element opfylder alle forespørgselskriterierne.

Men den anden forespørgsel:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

vil returnere begge dokumenter, hvilket sandsynligvis ikke er, hvad du vil have som 27 er større end 20 og 3 er mindre end 15 . Dette er fordi 27 matcher de første kriterier og 3 Sekundet. Denne adfærd er, hvad der er nævnt i dokumentationen.

...et element kan opfylde betingelsen over 15, og et andet element kan opfylde betingelsen med mindre end 20, eller et enkelt element kan opfylde begge:

Konklusion:

Områdeforespørgsler mod arrays vil matche så langt som et eller flere elementer i arrayet, der matcher alle forespørgselskriterierne.

Lektion:

Brug ikke intervalforespørgsel med arrays. Du vil få et uventet resultat.



  1. Hurtigste måde at fjerne duplikerede dokumenter i mongodb

  2. MongoDB indlejret gruppe?

  3. Hvordan adskiller redis instansen med flere brugere, der kører på samme server?

  4. Native MongoDB-maskering (3. metode)