Я не могу найти это в документации в любом из очевидных мест. Я хотел бы знать, можно ли узнать, выполнил ли Mongo вставку или обновление в операции upsert?
Проверьте, удалось ли добавить MongoDB вставку или обновление
Ответ 1
Да, при безопасном вызове (или getLastError) функция обновления вернет массив с полем upsert и обновленным Existing field.
Вы можете прочитать версию PHP здесь: http://php.net/manual/en/mongocollection.insert.php в нижней части.
Как говорится в документации по upserted
:
Если произошло воссоздание, это поле будет содержать новое поле записи _id. Для upserts будет присутствовать либо это поле, либо updateExisting (если не произошла ошибка).
Итак, upserted содержит _id
новой записи, если была вставлена вставка или она увеличит updatedExisting
, если она обновит запись.
Я уверен, что аналогичная вещь появляется во всех драйверах.
Изменить
Он будет фактически логическим в поле updatedExisting
true
или false
Ответ 2
Только для справки, в node.js:
collection.update( source, target, { upsert: true }, function(err, result, upserted) {
...
});
Ответ 3
Только для справки, в node.js с использованием Mongoose 3.6:
model.update( findquery, updatequery, { upsert: true }, function(err, numberAffected, rawResponse) {
...
});
Если rawResponse выглядит так, когда он обновил существующий документ:
{ updatedExisting: true,
n: 1,
connectionId: 222,
err: null,
ok: 1 }
И он выглядит так, когда он создал новый документ:
{ updatedExisting: false,
upserted: 51eebc080eb3e2208a630d8e,
n: 1,
connectionId: 222,
err: null,
(Оба случая возвращают numberAffected = 1)
Ответ 4
Ответ был взят из книги "Прикладные образцы моделей MongoDB" ! определить, была ли upsert вставкой или обновление