Esto, correctamente, no insertará ningún registro con event_id 1 o 2 si aún no existen
db.foo.update({event_id: { $in: [1,2]}}, {$inc: {visit:1}}, true, true)
Esto se debe a que objNew
parte de la consulta (ver http://www.mongodb.org/display /DOCS/Updating#Updating-UpsertswithModifiers
) no tiene un valor para el campo event_id
. Como resultado, necesitará al menos X+1 viajes a la base de datos, donde X es el número de event_ids, para asegurarse de insertar un registro si no existe uno para un event_id en particular (el +1 proviene de la consulta anterior , lo que aumenta el contador de visitas para los registros existentes). Para decirlo de otra manera, ¿cómo sabe MongoDB que desea usar el valor 2 para event_id y no 1? ¿Y por qué no 6?
W.r.t. inserción por lotes con ruby, creo que es posible como sugiere el siguiente enlace, aunque solo he usado el controlador Java:¿Insertar/actualizar lote usando Mongoid?