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

Mongo DB集計結果を既存のコレクションに追加するにはどうすればよいですか?

    Mongo 4.2を開始 、新しい $merge 集計演算子($outと同様) )マージを許可します 指定されたコレクションへの集約パイプラインの結果:

    この入力が与えられた場合:

    db.source.insert([
      { "_id": "id_1", "a": 34 },
      { "_id": "id_3", "a": 38 },
      { "_id": "id_4", "a": 54 }
    ])
    db.target.insert([
      { "_id": "id_1", "a": 12 },
      { "_id": "id_2", "a": 54 }
    ])
    

    $merge 集約ステージは次のように使用できます:

    db.source.aggregate([
      // { $whatever aggregation stage, for this example, we just keep records as is }
      { $merge: { into: "target" } }
    ])
    

    作成するには:

    // > db.target.find()
    { "_id" : "id_1", "a" : 34 }
    { "_id" : "id_2", "a" : 54 }
    { "_id" : "id_3", "a" : 38 }
    { "_id" : "id_4", "a" : 54 }
    

    $mergeに注意してください オペレーターには、多くのオプション が付属しています。 挿入されたレコードを既存のレコードと競合するようにマージする方法を指定します。

    この場合(デフォルトのオプションを使用)、これは次のとおりです。

    • ターゲットコレクションの既存のドキュメントを保持します(これは、{ "_id": "id_2", "a": 54 }の場合です。 )

    • ドキュメントがまだ存在しない場合は、集計パイプラインの出力からターゲットコレクションにドキュメントを挿入します(_idに基づく) -これは{ "_id" : "id_3", "a" : 38 }の場合です。 )

    • 集約パイプラインが(_idに基づいて)ターゲットコレクションに存在するドキュメントを生成するときに、ターゲットコレクションのレコードを置き換えます -これは{ "_id": "id_1", "a": 12 }の場合です。 { "_id" : "id_1", "a" : 34 }に置き換えられました )



    1. メモリとCPUスパイクをredisします

    2. 自分のAmazonAWSアカウントのMongoDB-as-a-Service

    3. MongoDBで特定の名前のインデックスを作成する方法

    4. Mongo C#ドライバーを使用した不変値型のシリアル化