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



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

498   4  

4 ответов:

Да есть, при безопасном вызове (или getLastError) функция update вернет массив с полем upsert и полем updatedExisting.

вы можете прочитать PHP версию этого здесь:http://php.net/manual/en/mongocollection.insert.php к низу.

как говорится в документации на upserted:

если upsert произошло, это поле будет содержать поле _id новой записи. Для вставки, либо это поле или updatedExisting будет присутствовать (если не произошла ошибка).

так upserted содержит _id новой записи, если вставка была сделана или она будет увеличиваться updatedExisting если он обновил рекорд.

Я уверен, что подобная вещь появляется во всех драйверах.

Edit

на самом деле это будет логическое значение в

только для справки, в узле.js:

collection.update( source, target, { upsert: true }, function(err, result, upserted) {
  ...
});

только для справки, в узле.js с помощью Мангуста 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)

ответ был взят из книги " MongoDB Applied Design Patterns !определить, является ли upsert вставкой или обновление

Comments

    Ничего не найдено.