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

Jak zruším nastavení všech polí kromě známé sady polí?

Pokud vám nezáleží na atomicitě, můžete to udělat pomocí save :

doc = db.myCollection.findOne({"_id": 123});
for (k in doc.field_to_prune) {
  if (k === 'keep_field_1') continue;
  if (k === 'keep_field_2') continue;
  delete doc.field_to_prune[k];
}
db.myCollection.save(doc);

Hlavním problémem tohoto řešení je, že není atomární. Takže jakákoli aktualizace doc mezi findOne a save bude ztracen.

Alternativou je skutečně unset všechna nechtěná pole místo uložení doc :

doc = db.myCollection.findOne({"_id": 123});
unset = {};
for (k in doc.field_to_prune) {
  if (k === 'keep_field_1') continue;
  if (k === 'keep_field_2') continue;
  unset['field_to_prune.'+k] = 1;
}
db.myCollection.update({_id: doc._id}, {$unset: unset});

Toto řešení je mnohem lepší, protože mongo spouští update atomicky, takže se žádná aktualizace neztratí. A k tomu, co chcete, nepotřebujete další sbírku.



  1. Jak z dokumentu vyloučit některá pole

  2. Dotaz pomocí rozsahu dat v MongoDB v Javě

  3. mongo.so:> nedefinovaný symbol:php_json_encode v Neznámý na řádku 0. Po instalaci ovladače mongo pro php

  4. Bůh konfigurační soubor pro sledování stávajících procesů?