Подтвердить что ты не робот

Проверьте, удалось ли добавить MongoDB вставку или обновление

Я не могу найти это в документации в любом из очевидных мест. Я хотел бы знать, можно ли узнать, выполнил ли Mongo вставку или обновление в операции upsert?

4b9b3361

Ответ 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)