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

vytváření krytého indexu pro agregační rámec

Abyste z indexu vytěžili maximum, musíte mít $match dostatečně brzy v kanálu, který využívá všechna pole v indexu. A nepoužívejte $and protože je to zbytečné a v aktuální verzi (2.4) může způsobit, že index nebude plně využit (naštěstí opraveno pro nadcházející 2.6).

Dotaz však není zcela správný, protože musíte použít $elemMatch abyste se ujistili, že stejný prvek je použit pro splnění polí name a value.

Váš dotaz by měl být:

db.Phone.aggregate([
{$match: {  type: "Samsung", 
           attributes: { $all: [
                {$elemMatch: {"value":"100", "type" : "BatteryLife" }},
                {$elemMatch: {"value":"200$", "type" : "Price" }}
           ] }
        }
}]);

Teď to není bude to krytý dotaz, protože atributy.hodnota a název jsou vloženy, nemluvě o tom, že název není v indexu.

Musíte mít index {"type":1, "attributes.value":1, "attributes.name":1} pro nejlepší výkon, i když to stále nebude zahrnuto, bude mnohem selektivnější než nyní.




  1. Členský stát sady replik MongoDB je JINÝ

  2. Vyhodnocení složitosti dotazu agregace MongoDB:cena $lookup

  3. Jak odečíst dva datum a čas v mongodb

  4. Implementujte automatické doplňování na MongoDB