2015-04-22 15 views
6

Tôi tạo ra hai bộ sưu tập sử dụng Robomongo: collection_Project có chứa tài liệu như thế nàyMongoDB cập nhật năng động của bộ sưu tập khi thay đổi xảy ra trong bộ sưu tập khác

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

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

mà tôi tạo ra với chức năng

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

và collection_Object có chứa tài liệu như thế này

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

đó tôi tạo với chức năng

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

tôi cập nhật các tài liệu của collection_Project với chức năng

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

để các tài liệu trong collection_Project trông như thế này

{ 
"_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 
    } 
    ] 
} 

Tôi có thể cập nhật tài liệu chỉ trong collection_Object và xem sự thay đổi trong collection_Project?

tôi đã cố gắng để làm điều đó

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

nhưng tôi các collection_Project không thay đổi.

Bạn có bất kỳ đầu mối nào không?

Trả lời

2

Dường như bạn đang nhúng tài liệu 'Đối tượng' trong tài liệu 'Dự án', có thể là tốt, nhưng cách tiếp cận đó loại bỏ sự cần thiết cho bộ sưu tập collection_Object riêng biệt của bạn. Đó là để nói, collection_Object là dự phòng vì mỗi đối tượng (không chỉ là một tham chiếu) thực sự được lưu trữ bên trong tài liệu Project như bạn đã thực hiện nó.

Xem tài liệu để biết thông tin về cách sử dụng embedded documents.

Hoặc, bạn có thể sử dụng document references.

Cách tiếp cận tốt nhất để sử dụng tùy thuộc vào trường hợp sử dụng cụ thể của bạn.

Các vấn đề liên quan