sql >> Database >  >> NoSQL >> MongoDB

gedekte index maken voor aggregatieraamwerk

Om het meeste uit de index te halen, moet je vroeg genoeg een $match in de pijplijn hebben die alle velden in de index gebruikt. En vermijd het gebruik van $and operator omdat het niet nodig is en in de huidige (2.4) versie ervoor kan zorgen dat een index niet volledig wordt gebruikt (gelukkig opgelost voor de komende 2.6).

De zoekopdracht is echter niet helemaal correct omdat u $elemMatch . moet gebruiken om ervoor te zorgen dat hetzelfde element wordt gebruikt om te voldoen aan de naam- en waardevelden.

Uw vraag zou moeten zijn:

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

Nu is het niet wordt een gedekte zoekopdracht, aangezien de attributen.value en naam zijn ingesloten, om nog maar te zwijgen van het feit dat de naam niet in de index staat.

De index moet {"type":1, "attributes.value":1, "attributes.name":1} zijn voor de beste prestaties, hoewel het nog steeds niet wordt gedekt, zal het veel selectiever zijn dan nu.




  1. Hoe de laatste updatetijd van elk document in MongoDB op te halen?

  2. Json importeren uit bestand in mongoDB met behulp van mongoimport

  3. MongoDB:vraag door @DBref

  4. Waarom mongodb wordt gereset na push naar openshift