2015-04-22 9 views
6

Ich habe zwei Sammlungen mit Robomongo: collection_Project dieMongoDB dynamische Aktualisierung der Sammlung, wenn Änderungen erfolgt in einer anderen Sammlung

{ 
"_id" : ObjectId("5537ba643a45781cc8912d8f"), 

"_Name" : "ProjectName", 
"_Guid" : LUUID("16cf098a-fead-9d44-9dc9-f0bf7fb5b60f"), 
"_Obj" : [ 
] 
} 

Dokumente wie diese enthält, die ich mit der Funktion

public static void CreateProject(string ProjectName) 
    { 
     MongoClient client = new MongoClient("mongodb://localhost/TestCreationMongo"); 
     var db = client.GetServer().GetDatabase("TestMongo"); 
     var collection = db.GetCollection("collection_Project"); 
     var project = new Project 
     { 
      _Name = ProjectName, 
      _Guid = Guid.NewGuid(), 
      _Obj = new List<c_Object>() 
     }; 
     collection.Insert(project); 
    } 

und collection_Object erstellen das enthält Dokumente wie diese

{ 
    "_id" : ObjectId("5537ba6c3a45781cc8912d90"), 
    "AssociatedProject" : "ProjectName", 
    "_Guid" : LUUID("d0a5565d-a0aa-7a4a-9683-b86f1c1de188"), 
    "First" : 42, 
    "Second" : 1000 
} 

dass ich mit der Funktion

erstellen
public static void CreateObject(c_Object ToAdd) 
    { 
     MongoClient client = new MongoClient("mongodb://localhost/TestCreationMongo"); 
     var db = client.GetServer().GetDatabase("TestMongo"); 
     var collection = db.GetCollection("collection_Object"); 

     collection.Insert(ToAdd); 

ich die Unterlagen von collection_Project mit der Funktion aktualisieren

public static void AddObjToProject(c_Object ObjToAdd, string AssociatedProject) 
    { 
     MongoClient client = new MongoClient("mongodb://localhost/TestCreationMongo"); 
     var db = client.GetServer().GetDatabase("TestMongo"); 
     var collection = db.GetCollection<Project>("collection_Project"); 

     var query = Query.EQ("_Name", AssociatedProject); 
     var update = Update.AddToSetWrapped<c_Object>("_Obj", ObjToAdd); 

     collection.Update(query, update); 
    } 

so dass die Dokumente in collection_Project wie diese

{ 
"_id" : ObjectId("5537ba643a45781cc8912d8f"), 
"_Name" : "ProjectName", 
"_Guid" : LUUID("16cf098a-fead-9d44-9dc9-f0bf7fb5b60f"), 
"_Obj" : [ 
    { 
     "_id" : ObjectId("5537ba6c3a45781cc8912d90"), 
     "AssociatedProject" : "ProjectName", 
     "_Guid" : LUUID("d0a5565d-a0aa-7a4a-9683-b86f1c1de188"), 
     "First" : 42, 
     "Second" : 1000 
    } 
    ] 
} 

aussehen Kann ich eine Aktualisierung Das Dokument nur im collection_Object und die Änderung im collection_Project sehen?

habe ich versucht, das zu tun,

public static void UpdateObject(c_Object ToUpdate) 
    { 
     MongoClient client = new MongoClient("mongodb://localhost/TestCreationMongo"); 
     var db = client.GetServer().GetDatabase("TestMongo"); 
     var collection = db.GetCollection("collection_Object"); 

     var query = Query.EQ("_Guid", ToUpdate._Guid); 
     var update = Update.Replace<c_Object>(ToUpdate); 
     collection.Update(query, update); 
    } 

aber ich die collection_Project nicht ändert.

Haben Sie eine Ahnung?

Antwort

2

Es sieht so aus, als ob Sie das Dokument "Objekt" in das Dokument "Projekt" einbetten, was in Ordnung ist, aber dieser Ansatz macht die separate Sammlung collection_Object überflüssig. Das heißt, collection_Object ist redundant, da jedes Objekt (nicht nur eine Referenz) tatsächlich im Projektdokument gespeichert ist, wie Sie es implementiert haben.

Informationen zur Verwendung von embedded documents finden Sie in der Dokumentation.

Alternativ können Sie document references verwenden.

Die beste Vorgehensweise hängt von Ihrem spezifischen Anwendungsfall ab.