MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Umbenennungsdatenbankfeld innerhalb des Arrays

Für das, was es wert ist, klingt es zwar schrecklich, dies tun zu müssen, aber die Lösung ist eigentlich ziemlich einfach. Dies hängt natürlich davon ab, wie viele Datensätze Sie haben. Aber hier ist mein Beispiel:

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

Ich iteriere über meine Sammlung, wo das Array gefunden wird und der "falsche" Name gefunden wird. Ich iteriere dann über die Untersammlung, setze den neuen Wert, lösche den alten und aktualisiere das gesamte Dokument. Es war relativ schmerzlos. Zugegeben, ich muss nur ein paar Zehntausend Zeilen durchsuchen, von denen nur ein paar Dutzend die Kriterien erfüllen.

Trotzdem hoffe ich, dass diese Antwort jemandem hilft!

Bearbeiten:snapshot() hinzugefügt zur Abfrage. Sehen Sie in den Kommentaren warum.

Sie müssen snapshot() anwenden zum Cursor, bevor Sie Dokumente aus der Datenbank abrufen. Sie können nur snapshot() verwenden mit nicht geshardeten Sammlungen.

Von MongoDB 3.4, snapshot() Funktion wurde entfernt. Wenn Sie also Mongo 3.4+ verwenden, sollte das obige Beispiel snapshot() entfernen Funktion.