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

MongoDB přejmenovat pole databáze v poli

Na to, co to stojí za to, i když to zní hrozně, je řešení ve skutečnosti docela snadné. To samozřejmě závisí na tom, kolik záznamů máte. Ale tady je můj příklad:

db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
{    
    for(i = 0; i != item.Value.Tiers.length; ++i)
    {
        item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
        delete item.Value.Tiers[i].AssetsUnderManagement;
    }
    
    db.Setting.update({_id: item._id}, item);
});

Iteruji přes svou sbírku, kde je pole nalezeno a kde je nalezen „nesprávný“ název. Poté iteruji podkolekci, nastavím novou hodnotu, odstraním starou a aktualizuji celý dokument. Bylo to relativně bezbolestné. Připouštím, že mám k prohledávání jen několik desítek tisíc řádků, z nichž jen několik desítek splňuje kritéria.

Přesto doufám, že tato odpověď někomu pomůže!

Edit:Přidáno snapshot() na dotaz. Podívejte se proč v komentářích.

Musíte použít snapshot() na kurzor před načtením jakýchkoli dokumentů z databáze. Můžete použít pouze snapshot() s neskartovanými sbírkami.

Z MongoDB 3.4, snapshot() funkce byla odstraněna. Pokud tedy používáte Mongo 3.4+ , výše uvedený příklad by měl odstranit snapshot() funkce.



  1. Lešení Yeoman, Mongoose a MongoDB

  2. Používá Redis pro ověření uživatelské jméno?

  3. služba mongodb se nespouští

  4. Node.js, (Hi)Redis a příkaz multi