Gearman и PHP: правильный способ для рабочего отправить сообщение об ошибке

Я пытаюсь заставить MongoDB выполнить обновление нескольких записи с помощью следующего запроса, в конечном итоге с использованием MongoMapper и драйвера Mongo ruby.

db.foo.update({event_id: { $in: [1,2]}}, {$inc: {visit:1}}, true, true)

Это отлично работает, если все записи существуют, но не создает новые записи для записей, которые не существуют. Следующая команда дает желаемый эффект из оболочки , но, вероятно, не идеален для драйвера ruby.

[1,2].forEach(function(id) {db.foo.update({event_id: id}, {$inc: {visit:1}}, true, true) });

Я мог бы перебрать каждый идентификатор, который я хочу вставить, из Ruby, но это потребовало бы обращения к базе данных для каждого элемента. Есть ли способ добавить несколько элементов из драйвер ruby ​​только с одним обращением к базе данных? Какая здесь лучшая практика? Использование mongomapper и драйвера ruby, есть ли способ отправить несколько обновлений в одном пакете, генерирует что-то вроде следующего?

db.foo.update({event_id: 1}, {$inc: {visit:1}}, true); db.foo.update({event_id: 2}, {$inc: {visit:1}}, true);

Пример данных:

Желаемые данные после команды, если существуют две записи.

{ "_id" : ObjectId("4d6babbac0d8bb8238d02099"), "event_id" : 1, "visit" : 11 }
{ "_id" : ObjectId("4d6baf56c0d8bb8238d0209a"), "event_id" : 2, "visit" : 2 }

Фактические данные после команды, если существуют две записи.

{ "_id" : ObjectId("4d6babbac0d8bb8238d02099"), "event_id" : 1, "visit" : 11 }
{ "_id" : ObjectId("4d6baf56c0d8bb8238d0209a"), "event_id" : 2, "visit" : 2 }

Желаемые данные после команды, если только запись с event_id 1 существует.

{ "_id" : ObjectId("4d6babbac0d8bb8238d02099"), "event_id" : 1, "visit" : 2 }
{ "_id" : ObjectId("4d6baf56c0d8bb8238d0209a"), "event_id" : 2, "visit" : 1 }

Фактические данные после команды, если существует только запись с event_id 1.

{ "_id" : ObjectId("4d6babbac0d8bb8238d02099"), "event_id" : 1, "visit" : 2 }
6
задан jcnnghm 28 February 2011 в 15:38
поделиться