Programing

MongoDB upsert가 삽입 또는 업데이트를 수행했는지 확인

crosscheck 2020. 12. 25. 23:00
반응형

MongoDB upsert가 삽입 또는 업데이트를 수행했는지 확인


나는 명백한 곳의 문서에서 이것을 찾을 수 없습니다. Mongo가 upsert 작업에서 삽입 또는 업데이트를 실행했는지 알 수 있는지 알고 싶습니다.


예, 안전 호출 (또는 getLastError)에서 업데이트 함수는 upsert 필드와 updatedExisting 필드가있는 배열을 반환합니다.

여기에서 PHP 버전을 읽을 수 있습니다 : http://php.net/manual/en/mongocollection.insert.php 하단쪽으로.

에 대한 문서에서 말했듯이 upserted:

upsert가 발생하면이 필드에는 새 레코드의 _id 필드가 포함됩니다. upsert의 경우이 필드 또는 updatedExisting이 표시됩니다 (오류가 발생하지 않은 경우).

따라서 upserted _id는 삽입이 수행 된 경우 새 레코드를 포함하고 레코드를 updatedExisting업데이트 하면 증가 합니다.

나는 모든 드라이버에서 비슷한 것이 나타날 것이라고 확신합니다.

편집하다

실제로 또는 updatedExisting필드 에서 부울이됩니다.truefalse


참조 용으로 만 node.js에서 :

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

참고로 Mongoose 3.6을 사용하는 node.js에서 :

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가 삽입인지 업데이트인지 확인

참조 URL : https://stackoverflow.com/questions/13955212/check-if-mongodb-upsert-did-an-insert-or-an-update

반응형