sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb-frågan långsam med punktnotation

Din explain() utdata tyder på att:

  1. Det finns 10962 objekt som har key.a : 456213154 . Din db.collection.find({"key.a": 456213154}) sökfrågan använde indexet på key.a , och returnerade 10962 objekt.

  2. Det finns 0 objekt i din samling som har key.a : 456213154 och har key.b : { $exists : true } . db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}}) fråga använde ditt index på nyckel.

Se n värde för varje fråga - detta är siffran som returneras; och cursor värde - detta är BtreeCursor om ett index används. I det här fallet skulle det vara vettigt varför den första frågan tar mycket längre tid, eftersom den har betydligt fler objekt att returnera.

Är du säker på att dokumenten med key.a : 456213154 värden har också key.b värden?

Redigera:

Frågan med $exists param är fel syntax för att kontrollera existens i inbäddade dokument.

Försök med db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } }) .




  1. Ta bort dokument från mongoDB

  2. Mongoid Query DB av Virtual Attribute

  3. Mongo Sortera efter antal matchningar i Array

  4. Lista över MongoDB-datumoperatörer, metoder och variabler