MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

$unset na wielu polach w mongodb

W wersji MongoDB>=3.2 :

Możesz skorzystać z .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);

Odniesienie: pisanie zbiorcze

W wersji MongoDB>=4.2 :

Ponieważ chciałeś usunąć wiele pól (gdzie nazwy pól nie mogą być wymienione w dół lub nieznane) o wartości null wartość, spróbuj poniżej zapytania :

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: plac zabaw dla mongo

Odniesienie: aktualizacja-z-potoku-agregacji , potok-aggregacji

Uwaga:

Wierzę, że byłaby to jednorazowa operacja i w przyszłości możesz użyć Joi pakiet npm lub walidatory schematu mongoose, aby ograniczyć pisanie null są wartościami pól. Jeśli możesz wypisać nazwy pól tak, jakby nie było ich zbyt wiele, a rozmiar zestawu danych jest zbyt duży, spróbuj użyć agregacji z $$REMOVE zgodnie z sugestią „@thammada”.

Od teraz potok agregacji w .updateMany() nie jest obsługiwany przez wielu klientów nawet kilka wersji powłoki mongo - wtedy mój bilet do nich został rozwiązany za pomocą .update() , jeśli to nie zadziała, spróbuj użyć update + { multi : true } .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak łączyć ciągi w SQL

  2. Doskonalenie sztuki automatyzacji i zarządzania najpopularniejszymi bazami danych typu open source:2017 @ Severalnines

  3. Jak usunąć dokumenty za pomocą Node.js Mongoose?

  4. Mongoose — nazwa kolekcji Force

  5. Obsługa rozłączeń/ponownych połączeń MongoDB z węzła