MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB zmienia nazwę pola bazy danych w tablicy

Co to jest warte, choć wydaje się to okropne, że trzeba to zrobić, rozwiązanie jest w rzeczywistości całkiem proste. To oczywiście zależy od tego, ile masz rekordów. Ale oto mój przykład:

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

Iteruję po mojej kolekcji, w której znajduje się tablica i znaleziono „niewłaściwą” nazwę. Następnie przechodzę przez kolekcję podrzędną, ustawiam nową wartość, usuwam starą i aktualizuję cały dokument. To było stosunkowo bezbolesne. To prawda, że ​​mam do przeszukania tylko kilkadziesiąt tysięcy wierszy, z których tylko kilkadziesiąt spełnia kryteria.

Mimo to mam nadzieję, że ta odpowiedź komuś pomoże!

Edycja:dodano snapshot() do zapytania. Zobacz dlaczego w komentarzach.

Musisz zastosować snapshot() do kursora przed pobraniem jakichkolwiek dokumentów z bazy danych. Możesz użyć tylko snapshot() z niesharded kolekcjami.

Z MongoDB 3.4, snapshot() funkcja została usunięta. Więc jeśli używasz Mongo 3.4+ , powyższy przykład powinien usunąć snapshot() funkcja.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dynamiczne połączenie bazy danych z mongodb lub mongoose z nodejs

  2. Szyfrowanie danych MongoDB w spoczynku

  3. Mongoose wygasa, nieruchomość nie działa prawidłowo

  4. MongoDB .NET nie generuje _id na upsert

  5. Importuj plik CSV do MongoDB za pomocą mongoimport