Question Mongodb: $ en opérateur vs lot de requêtes uniques


Je sais que MongoDB est capable de traiter beaucoup de requêtes / sec, mais disons que je dois interroger beaucoup de documents d'une collection avec leur _id; Qu'est-ce qui sonne mieux: créer un $ in sur l'attribut _id avec tous les identifiants que je veux obtenir, ou effectuer une boucle sur les requêtes findOne?


35
2017-11-21 22:27


origine


Réponses:


Je voudrais certainement utiliser la requête $ in et fournir un tableau de _ids.

Exemple:

db.collection.find({
    "key": {
        "$in": [
            ObjectId("xxx"),
            ObjectId("yyy"),
            ObjectId("zzz")
        ]
    }
})

Pourquoi?

  • Si vous bouclez, il existe une certaine quantité de configuration et de suppression pour chaque requête créant et épuisant des curseurs qui créeraient une surcharge.
  • Si vous ne le faites pas sur une machine locale, cela crée également une surcharge TCP / IP pour chaque requête. Localement, vous pouvez utiliser des sockets de domaine.
  • Il y a un index sur "_id" créé par défaut et la collecte d'un groupe de documents à renvoyer dans une requête par lot devrait être extrêmement rapide, il n'est donc pas nécessaire de diviser cela en petites requêtes.

Il y a de la documentation supplémentaire ici si vous voulez le vérifier.


38
2017-11-21 22:53