Isso - corretamente - não inserirá nenhum registro com event_id 1 ou 2 se eles ainda não existirem
db.foo.update({event_id: { $in: [1,2]}}, {$inc: {visit:1}}, true, true)
Isso ocorre porque o
objNew
parte da consulta (consulte http://www.mongodb.org/display /DOCS/Updating#Updating-UpsertswithModifiers
) não tem um valor para o campo event_id
. Como resultado, você precisará de pelo menos X+1 viagens ao banco de dados, onde X é o número de event_ids, para garantir que você insira um registro caso não exista um para um event_id específico (o +1 vem da consulta acima , que aumenta o contador de visitas para registros existentes). Para dizer de uma maneira diferente, como o MongoDB sabe que você deseja usar o valor 2 para o event_id e não 1? E por que não 6? W.r.t. inserção em lote com ruby, acho que é possível, como sugere o link a seguir - embora eu tenha usado apenas o driver Java:Inserção/atualização em lote usando Mongoid?