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

Mongo Query otázka $gt,$lt

Tohle je opravdu matoucí téma. Pracuji v 10gen a musel jsem strávit chvíli tím, že jsem si to omotal;)

Pojďme si projít, jak dotazovací stroj zpracovává tento dotaz.

Zde je dotaz znovu:

> db.test.find({ b : { $gt :  4, $lt : 6}});

Když se dostane k záznamu, zdá se, že by se neměl shodovat...

{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 4, 6, 8 ] }

Shoda se neprovádí proti každému prvku pole, ale spíše proti poli jako celku.

Porovnání se provádí ve třech krocích:

Krok 1 :Najít všechny dokumenty, kde b má hodnotu větší než 4

b:[2,4,6,8] odpovídá, protože 6 a 8 jsou větší než 4

Krok 2 :Najít všechny dokumenty, kde b má hodnotu menší než 6

b:[2,4,6,8] odpovídá, protože 2 a 4 jsou menší než 6

Krok 3 :Najděte sadu dokumentů, které se shodovaly v kroku 1 a 2.

Dokument s b:[2,4,6,8] se shodoval s oběma kroky 1 a 2, takže je vrácen jako shoda. Všimněte si, že výsledky jsou v tomto kroku také deduplikovány, takže stejný dokument nebude vrácen dvakrát.

Pokud chcete, aby se váš dotaz vztahoval na jednotlivé prvky pole, nikoli na pole jako celek, můžete použít operátor $elemMatch. Například

> db.temp.find({b: {$elemMatch: {$gt: 4, $lt: 5}}})
> db.temp.find({b: {$elemMatch: {$gte: 4, $lt: 5}}})
  { "_id" : ObjectId("4d558b6f4f0b1e2141b66660"), "b" : [ 2, 3, 4, 5, 6 ] }


  1. Použití sed na proměnnou xargs nefunguje uvnitř expanze shellu

  2. Mongodb – Chyba Mongoimport neplatný znak

  3. Jak správně iterovat přes velký soubor json

  4. Jak v MongoDB používáte $set k aktualizaci vnořené hodnoty/vloženého dokumentu?