sql >> Database >  >> NoSQL >> MongoDB

MongoDB hernoemen databaseveld binnen array

Voor wat het waard is, hoewel het vreselijk klinkt om te moeten doen, is de oplossing eigenlijk vrij eenvoudig. Dit hangt natuurlijk af van het aantal records dat u heeft. Maar hier is mijn voorbeeld:

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

Ik herhaal mijn verzameling waar de array wordt gevonden en de "verkeerde" naam wordt gevonden. Ik herhaal dan de subverzameling, stel de nieuwe waarde in, verwijder de oude en werk het hele document bij. Het was relatief pijnloos. Toegegeven, ik heb maar een paar tienduizenden rijen om door te zoeken, waarvan er slechts enkele tientallen voldoen aan de criteria.

Toch hoop ik dat dit antwoord iemand helpt!

Bewerken:snapshot() toegevoegd naar de vraag. Zie waarom in de reacties.

U moet snapshot() . toepassen naar de cursor voordat u documenten uit de database ophaalt. U kunt alleen snapshot() gebruiken met niet-gecodeerde collecties.

Van MongoDB 3.4, snapshot() functie is verwijderd. Dus als u Mongo 3.4+ gebruikt, moet het bovenstaande voorbeeld snapshot() . verwijderen functie.



  1. MongoDB cursor.count()

  2. Hoe vraag ik objecten waarnaar wordt verwezen in MongoDB?

  3. Invloed op de prestatie van de meltdown op MongoDB:AWS, Azure en DigitalOcean

  4. MongoDB Multikey Indexes &Index Intersection Bounds