sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB byter namn på databasfält inom array

För vad det är värt, även om det låter hemskt att behöva göra, är lösningen faktiskt ganska enkel. Detta beror såklart på hur många skivor du har. Men här är mitt exempel:

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

Jag itererar över min samling där arrayen hittas och "fel" namn hittas. Jag upprepar sedan undersamlingen, ställer in det nya värdet, tar bort det gamla och uppdaterar hela dokumentet. Det var relativt smärtfritt. Givetvis har jag bara några tiotusentals rader att söka igenom, av vilka bara ett par dussin uppfyller kriterierna.

Ändå hoppas jag att det här svaret hjälper någon!

Redigera:Lade till snapshot() till frågan. Se varför i kommentarerna.

Du måste använda snapshot() till markören innan du hämtar några dokument från databasen. Du kan bara använda snapshot() med odelade samlingar.

Från MongoDB 3.4, snapshot() funktionen togs bort. Så om du använder Mongo 3.4+ bör exemplet ovan ta bort snapshot() funktion.



  1. kanaler utan kanallager eller någon annan gratis hosting

  2. Hur ändrar man typ av fält?

  3. Tips för att hantera MongoDB på distans

  4. MongoDB $toDate