2011-09-26 22 views
8

Rozpoczęłam od mongoDB i mangusty. Zastanawiam się, jak ludzie zarządzają ewoluującymi schematami. Na przykład jeśli Zacząłem schematu jak ten:Zmiana schematów w mongoDB/mangusta

user_ID : 123, 
user_firstName : 'bob', 
user_lastName : 'smith' 

i ewoluowała go coś takiego:

user_ID: 123, 
user_name: [first:'bob', last:'smith'] 

Jak mogę zaktualizować lub zarządzać stare rekordy, które zostały utworzone przy użyciu starego projektowania schematu ?

Odpowiedz

11

Jednym ze sposobów migracji schematów dokumentów obejmujących proste transformacje danych byłoby użycie $exists w celu znalezienia dokumentów, w których brakuje nowych pól i ich migracji.

Na przykład, przekształcając firstName i nazwisko do nowego pola nazwa użytkownika:

db.mycollection.find({ user_name : { $exists : false } }).forEach(
    function (doc) { 
     doc.user_name = {'first': doc.user_firstName, 'last': doc.user_lastName}; 

     // Remove old properties 
     delete doc.user_firstName; 
     delete doc.user_lastName; 

     // Save the updated document 
     db.mycollection.save(doc); 
    } 
) 

przypadku bardziej skomplikowanych migracji niektórych narzędzi, które mogą być pomocne są: