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

Mongo DB:あるコレクションからドキュメントをコピーして、別のコレクションの関連ドキュメントにフィールドとして追加するにはどうすればよいですか?

    MongoDB 4.4以降、 $ merge 集約されているのと同じコレクションに出力できます:

    db.products.aggregate([       
       { /**
        * from: The target collection.
        * localField: The local join field.
        * foreignField: The target join field.
        * as: The name for the results.
        * pipeline: The pipeline to run on the joined collection.
        * let: Optional variables to use in the pipeline field stages.
        */
       $lookup: {
         from: 'events',
         localField: '_id',
         foreignField: 'product_id',
         as: 'events'
       }},
       {/**
        * into: The target collection.
        * on: Fields to  identify.
        * whenMatched: Action for matching docs.
        * whenNotMatched: Action for non-matching docs.
        */
       $merge: {
         into: 'products',
         on: "_id",
         whenMatched: 'merge',
         whenNotMatched: 'insert'
       }}
    ])
    

    注意: $ mergeが集約されている同じコレクションに出力する場合、ドキュメントが複数回更新されたり、操作によって無限ループが発生したりする可能性があります。詳細はこちら https:// docs .mongodb.com / manual / reference / operator / aggregation / merge /#merge-behavior-same-collection

    1回限りの更新の場合は、最初の段階として初期フィルターを追加してパイプラインを保護し、ドキュメントが1回だけ更新されるようにすることができます。

    { $match: { events: { $exists: false } }
    



    1. Norm.MongoException:接続プールから接続を取得しようとしている接続タイムアウト

    2. MongoDB:ドキュメントの辞書を更新

    3. MongoDBBSONガイド

    4. mongoがmongoシェルからリッスンしているポートを確認するにはどうすればよいですか?