61

明らかな場所のいずれのドキュメントでもこれを見つけることができません。Mongoがアップサート操作で挿入または更新を実行したかどうかを知ることができるかどうか知りたいですか?

4

5 に答える 5

37

はい、あります。安全な呼び出し(またはgetLastError)で、update関数はupsertフィールドとupdatedExistingフィールドを持つ配列を返します。

これのPHPバージョンはここで読むことができます:http://php.net/manual/en/mongocollection.insert.php下部にあります。

それが上のドキュメントの中で言うようにupserted

アップサートが発生した場合、このフィールドには新しいレコードの_idフィールドが含まれます。アップサートの場合、このフィールドまたはupdatedExistingのいずれかが表示されます(エラーが発生した場合を除く)。

したがって、upsertedには、挿入が行われた場合は新しいレコードのが含まれ 、レコードが更新された場合_idは増分されます。updatedExisting

同様のことがすべてのドライバーに現れると確信しています。

編集

またはのupdatedExisting分野では実際にはブール値になりますtruefalse

于 2012-12-19T15:12:42.367 に答える
11

参考までに、node.jsでは次のようになります。

collection.update( source, target, { upsert: true }, function(err, result, upserted) {
  ...
});
于 2012-12-19T15:33:33.690 に答える
10

参考までに、Mongoose3.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を返します)

于 2013-07-23T17:27:23.260 に答える
6

答えは「MongoDBAppliedDesignPatterns」ブックから取られました!アップサートが挿入であったか更新であったかを判別する

于 2014-09-23T10:53:29.297 に答える
2

Node.jsでMongoDBドライバーを使用すると、次のコマンドを使用し3.5.9た後に関心のあるこれらのプロパティがあることがわかりました。updateOne{ upsert: true }

{
  modifiedCount: 0,
  upsertedId: null,
  upsertedCount: 0,
  matchedCount: 1
}

アップサートが何かを挿入すると、新しく挿入されたドキュメントIDを取得upsertedCount > 0して保持します。upsertedIdアップサートが何かを変更すると、が取得されますmodifiedCount > 0

すべてのCRUD操作のチュートリアルはこちらhttps://mongodb.github.io/node-mongodb-native/3.6/tutorials/crud/

于 2020-07-10T09:46:04.063 に答える