MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête Mongodb lente avec la notation par points

Votre explain() les résultats suggèrent que :

  1. Il y a 10962 objets qui ont key.a : 456213154 . Votre db.collection.find({"key.a": 456213154}) la requête a utilisé l'index sur key.a , et a renvoyé 10962 objets.

  2. Il y a 0 objets dans votre collection qui ont key.a : 456213154 et avoir key.b : { $exists : true } . Le db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}}) la requête a utilisé votre index sur la clé.

Voir le n valeur pour chaque requête - il s'agit du nombre renvoyé ; et le cursor valeur - c'est BtreeCursor si un index est utilisé. Dans ce cas, il serait logique que la première requête prenne beaucoup plus de temps, car elle a beaucoup plus d'objets à renvoyer.

Êtes-vous sûr que les documents avec key.a : 456213154 les valeurs ont aussi key.b valeurs ?

Modifier :

La requête avec le $exists param est la mauvaise syntaxe pour vérifier l'existence dans les documents intégrés.

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