2016-04-20 5 views
1

ich mit zwei Sammlungen eine Datenbank in MongoDB haben zu kombinieren:Suche nach einer effizienten Lösung zwei Kollektionen in MongoDB

Collection1:

{ 
    "id": "675", 
    "material_category_id": "35", 
    "material_name": "name", 
    "material_original_name": "Name", 
    "material_other_names": "", 
    "material_description": "Stuff about material", 
    "material_online_id": null, 
    "material_country_of_origin": "243", 
    "main_color": "9", 
    "page_title": "Page Title", 
    "pattern": "0", 
    "last_update": "2015-06-22 13:59:47" 
    } 

Collection2:

{ 
    "id": "3852", 
    "material_id": "675", 
    "material_photo_name": "stuff.jpg", 
    "original_name": "otherstuff.jpg", 
    "visible": "1", 
    "uploaded_at": "2015-11-16 05:27:00", 
    "thumb": "0" 
    } 

Ich brauche Übertragen von "material_photo_name" aus collection2 in collection1 für jedes geeignete Dokument (material_id in collection2 stimmt mit ID in collection1 überein) ... Gibt es eine Möglichkeit, dies ohne zu tun die Datenbank manuell umschreiben? Tausende und Abertausende von Dokumenten in Collection2 und Hunderten in Collection1 ... HINWEIS: jeder Wert wird eindeutig sein, so ein einfaches update() wird nicht funktionieren.

Antwort

1

Sie müssen ein Migrationsskript schreiben.

Sie können es einfach mit der mongo shell tun. Es würde wie folgt aussehen:

mongo 
use yourDB 
db.Collection1.find().forEach(function(doc1){ 
    var doc2 = db.Collection2.findOne({material_id: doc1.id}); 
    doc1.material_photo_name = doc2.material_photo_name; 
    db.Collection1.save(doc1); 
}); 

Wenn diese Aufgabe ein Teil eines Entwicklungsprojekts ist, wäre es ratsam, einen Migrations Framework zu verwenden (z mongo-migrate). Es gibt Migrations-Frameworks für eine Vielzahl von Sprachen.

Verwandte Themen