web-dev-qa-db-fra.com

Mongodb: $ in operator vs lot de requêtes simples

Je sais que MongoDB est capable de gérer un grand nombre de requêtes/s, mais disons que je dois interroger un grand nombre de documents d'une collection en fonction de leur _id; qu'est-ce qui sonne mieux: faire un $ in sur l'attribut _id avec tous les identifiants que je veux obtenir, ou parcourir les requêtes findOne?

39
spacenick

J'irais certainement avec l'utilisation de la requête $ in et en fournissant un tableau de _ids.

Exemple:

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

Pourquoi?

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

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

46
Tyler Brock