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

Dotaz Mongodb je pomalý s tečkovou notací

Vaše explain() výstupy naznačují, že:

  1. Existuje 10 962 objektů, které mají key.a : 456213154 . Vaše db.collection.find({"key.a": 456213154}) dotaz použil index na key.a a vrátil 10962 objektů.

  2. Ve vaší sbírce je 0 objektů, které mají key.a : 456213154 a mají key.b : { $exists : true } . The db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}}) dotaz použil váš index na klíči.

Viz n hodnota pro každý dotaz - toto je vrácené číslo; a cursor value - toto je BtreeCursor pokud je použit index. V tomto případě by dávalo smysl, proč první dotaz trvá mnohem déle, protože má podstatně více objektů k vrácení.

Jste si jisti, že dokumenty s key.a : 456213154 hodnoty mají také key.b hodnoty?

Upravit:

Dotaz s $exists param je nesprávná syntaxe pro kontrolu existence ve vložených dokumentech.

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




  1. Převeďte datum ISO do formátu rrrr-mm-dd

  2. MongoError:připojte ECONNREFUSED 127.0.0.1:27017

  3. Pro typ Option[reactivemongo.bson.BSONObjectID] nebyl nalezen žádný deserializátor Json

  4. shoda pole mongodb