Ceci - correctement - n'insérera aucun enregistrement avec event_id 1 ou 2 s'ils n'existent pas déjà
db.foo.update({event_id: { $in: [1,2]}}, {$inc: {visit:1}}, true, true)
C'est parce que le objNew
partie de la requête (voir http://www.mongodb.org/display /DOCS/Updating#Updating-UpsertswithModifiers
) n'a pas de valeur pour le champ event_id
. En conséquence, vous aurez besoin d'au moins X + 1 voyages vers la base de données, où X est le nombre d'event_ids, pour vous assurer que vous insérez un enregistrement s'il n'en existe pas pour un event_id particulier (le +1 vient de la requête ci-dessus , ce qui augmente le compteur de visites pour les enregistrements existants). Pour le dire d'une manière différente, comment MongoDB sait-il que vous voulez utiliser la valeur 2 pour l'event_id et non 1 ? Et pourquoi pas 6 ?
W.r.t. insertion par lots avec ruby, je pense que c'est possible comme le suggère le lien suivant - même si je n'ai utilisé que le pilote Java :Insérer/mettre à jour un lot avec Mongoid ?