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

Mongodb forespørgsel langsom med punktnotation

Din explain() output tyder på, at:

  1. Der er 10962 objekter, der har key.a : 456213154 . Din db.collection.find({"key.a": 456213154}) forespørgslen brugte indekset på key.a , og returnerede 10962 objekter.

  2. Der er 0 objekter i din samling, der har key.a : 456213154 og har key.b : { $exists : true } . db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}}) forespørgslen brugte dit indeks på nøgle.

Se n værdi for hver forespørgsel - dette er det returnerede tal; og cursor værdi - dette er BtreeCursor hvis der bruges et indeks. I dette tilfælde ville det give mening, hvorfor den første forespørgsel tager meget længere tid, fordi den har betydeligt flere objekter at returnere.

Er du sikker på, at dokumenterne med key.a : 456213154 værdier har også key.b værdier?

Rediger:

Forespørgslen med $exists param er den forkerte syntaks til at kontrollere eksistensen i indlejrede dokumenter.

Prøv db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } }) .




  1. Mocking Mongoose model med sjov

  2. $projekt i $lookup-sammenlægning

  3. Hvordan matcher man hele dokumentet?

  4. Kan ikke få mongoose-unique-validator til at virke