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

$unsetはmongodbの複数のフィールドにあります

    MongoDBバージョンの場合>=3.2

    .bulkWrite()を利用できます :

    let bulkArr = [
      {
        updateMany: {
          filter: { name: null },
          update: { $unset: { name: 1 } }
        }
      },
      {
        updateMany: {
          filter: { Roll_no: null },
          update: { $unset: { Roll_no: 1 } }
        }
      },
      {
        updateMany: {
          filter: { hobby: null },
          update: { $unset: { hobby: 1 } }
        }
      },
    ];
    
    /** All filter conditions will be executed on all docs
     *  but respective update operation will only be executed if respective filter matches (kind of individual ops) */
    db.collection.bulkWrite(bulkArr);
    

    参照: 一括書き込み

    MongoDBバージョンの場合>=4.2

    nullを持つ複数のフィールド(フィールド名をリストに表示できない、または不明な場合)を削除したかったため 値、以下のクエリを試してください:

    db.collection.update(
      {}, // Try to use a filter if possible
      [
        /** 
         * using project as first stage in aggregation-pipeline
         * Iterate on keys/fields of document & remove fields where their value is 'null'
         */
        {
          $project: {
            doc: {
              $arrayToObject: { $filter: { input: { $objectToArray: "$$ROOT" }, cond: { $ne: ["$$this.v", null] } } }
            }
          }
        },
        /** Replace 'doc' object as root of document */
        {
          $replaceRoot: { newRoot: "$doc" }
        }
      ],
      { multi: true }
    );
    

    テスト: モンゴプレイグラウンド

    参照: update-with-an-aggregation-pipeline、aggregation-pipeline

    注:

    これは1回限りの操作であり、将来的にはJoiを使用できると思います。 nullの書き込みを制限するnpmパッケージまたはmongooseスキーマバリデーター フィールド値としての。あまり多くないプラスデータセットサイズが大きすぎるかのようにフィールド名をリストできる場合は、$$REMOVEで集計を使用してみてください '@thammada'によって提案されたように。

    現在のところ、.updateMany()のaggregation-pipeline 少数のmongoシェルバージョンでも多くのクライアントでサポートされていません-当時、クライアントへの私のチケットは.update()を使用して解決されました 、機能しない場合は、update + { multi : true }を使用してみてください 。



    1. 重複するMongoObjectIdが2つの異なるコレクションで生成される可能性はありますか?

    2. 何千もの中規模のドキュメントを保存するための最も効率的なドキュメント指向データベースエンジンは何ですか?

    3. Spring4で一般的なRedisTemplateを乾燥させる

    4. MongoDBのテストデータの作成