sql >> データベース >  >> NoSQL >> MongoDB

MongoDBアトミックfindOrCreate:findOne、存在しない場合は挿入しますが、更新しません

    MongoDB 2.4以降、アトミックfindOrCreateの一意のインデックス(またはその他の回避策)に依存する必要がなくなりました。 操作のように。

    これは$setOnInsertのおかげです 2.4の新しい演算子。これにより、ドキュメントを挿入するときにのみ発生する更新を指定できます。

    これをupsertと組み合わせる オプションは、findAndModifyを使用できることを意味します アトミックなfindOrCreateを実現する のような操作。

    db.collection.findAndModify({
      query: { _id: "some potentially existing id" },
      update: {
        $setOnInsert: { foo: "bar" }
      },
      new: true,   // return new doc if one is upserted
      upsert: true // insert the document if it does not exist
    })
    

    $setOnInsertとして 挿入されるドキュメントにのみ影響します。既存のドキュメントが見つかった場合、変更は行われません。ドキュメントが存在しない場合は、指定された_idを持つドキュメントをアップサートしてから、挿入のみのセットを実行します。どちらの場合も、ドキュメントが返されます。



    1. Mongoで$regexと$or演算子を組み合わせる

    2. 1回のクエリでmongoから複数のドキュメントを削除する

    3. 入力されたフィールドに対するMongoDBクエリ

    4. 'または'条件のMongoDBクエリ