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

mongoのサブコレクションを更新または追加します

    単一のクエリでこれを行う簡単な方法があるかどうかはわかりません

    集計パイプラインで更新 MongoDBv4.2以降

    • $cond 名前を確認するには、subCollにあります 配列、
    • 真の条件、既存のオブジェクト$mapとマージする必要があります ループを繰り返すには、条件が一致するかどうかを確認してから、$mergeObjectsを使用して新しいデータオブジェクトを現在のオブジェクトとマージします
    • false条件、配列を連結する必要がある、現在のsubColl $concatArraysを使用した配列と新しいオブジェクト
    const _id = 123;
    const update = { name: 'John', other: 1000 };
    
    Schema.findOneAndUpdate(
      { _id: _id },
      [{
        $set: {
          subColl: {
            $cond: [
              { $in: [update.name, "$subColl.name"] },
              {
                $map: {
                  input: "$subColl",
                  in: {
                    $cond: [
                      { $eq: ["$$this.name", update.name] },
                      { $mergeObjects: ["$$this", update] },
                      "$$this"
                    ]
                  }
                }
              },
              { $concatArrays: ["$subColl", [update]] }
            ]
          }
        }
      }]
    )
    

    遊び場




    1. CentOS8へのApacheCouchDBのインストール

    2. meteor.comアプリで外部mongodbを使用する方法

    3. パフォーマンステストのためにScalaを使用して1億レコードをMongoDBにロードする方法は?

    4. ClusterControlを使用したデータベース監視