sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB omdøb databasefeltet i array

For hvad det er værd, selvom det lyder forfærdeligt at skulle gøre, er løsningen faktisk ret nem. Dette afhænger selvfølgelig af, hvor mange poster du har. Men her er mit eksempel:

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

Jeg gentager min samling, hvor arrayet er fundet, og det "forkerte" navn er fundet. Jeg gentager derefter undersamlingen, indstiller den nye værdi, sletter den gamle og opdaterer hele dokumentet. Det var forholdsvis smertefrit. Indrømmet, jeg har kun nogle få titusindvis af rækker at søge igennem, hvoraf kun et par dusin opfylder kriterierne.

Alligevel håber jeg, at dette svar hjælper nogen!

Rediger:Tilføjet snapshot() til forespørgslen. Se hvorfor i kommentarerne.

Du skal anvende snapshot() til markøren, før du henter dokumenter fra databasen. Du kan kun bruge snapshot() med uopdelte samlinger.

Fra MongoDB 3.4, snapshot() funktion blev fjernet. Så hvis du bruger Mongo 3.4+, bør eksemplet ovenfor fjerne snapshot() funktion.



  1. Sådan samles efter år-måned-dag i en anden tidszone

  2. Sådan laver du forespørgsler med tidszoneindstillinger i Mongodb

  3. redis ydeevne, gem json-objekt som en streng

  4. God konfigurationsfil til at overvåge eksisterende processer?