sql >> Databáze >  >> NoSQL >> MongoDB

$unset na více polích v mongodb

Ve verzi MongoDB>=3.2 :

Můžete využít .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);

Odkaz: hromadný zápis

Ve verzi MongoDB>=4.2 :

Protože jste chtěli smazat více polí (kde názvy polí nemohou být uvedeny níže nebo jsou neznámé) s null hodnotu, zkuste dotaz níže:

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 }
);

Test: mongohřiště

Odkaz: update-with-an-agregation-pipeline , aggregation-pipeline

Poznámka:

Věřím, že by to byla jednorázová operace a v budoucnu můžete použít Joi Balíček npm nebo validátory schématu mongoose k omezení zápisu null 's jako hodnoty pole. Pokud můžete uvést názvy polí, jako by jich nebylo příliš mnoho a velikost datové sady byla příliš velká, zkuste použít agregaci pomocí $$REMOVE jak navrhuje '@thammada'.

Od této chvíle, agregační potrubí v .updateMany() není podporováno mnoha klienty, dokonce i několika verzemi mongo shellu - tenkrát se můj lístek k nim vyřešil pomocí .update() , pokud to nefunguje, zkuste použít update + { multi : true } .



  1. MongoDB $toDecimal

  2. Jak na to:Zahrňte do své úlohy MapReduce knihovny třetích stran

  3. Funkce Mongo Find() nevyloučí _id

  4. Jak vytvořit zkracovač URL s Node.js a MongoDB