2013-05-25 5 views
0

MongoDB에는 아래 보이는 Document가 있습니다. 내부 문서 구조 내부의 문서를 업데이트하는 방법은 다음과 같습니다. [{1},[{2}],[{3}],[{4}]].MongoDB의 특정 하위 문서 업데이트 :

예 : 하위 문서 내의 하위 문서는 objectId:1objectId:2objectId:3objectId:4입니다. 같은

[{ _id : ObjectId("1")}], 
[{ _id : ObjectId("2")}], 
[{ _id : ObjectId("3")}], 
[{ _id : ObjectId("4")}] 


"Child": [{ 
    "_id": ObjectId("1"), 
    Name: "Raghu", 
    Age : 21, 

    "subchild": [{ 
      "_id": ObjectId("2"), 
      "Name": "Yuva", 
      Age : 23, 
     }, 
     [{ 
       "_id": ObjectId("3"), 
       Name: "Ravi", 
       Age : 25 
      } 
     ], 
     [{ 
       "_id": ObjectId("4"), 
       "Name": "Ram", 
        Age : 27 
      } 
     ] 
    ], 
} 

]

subchild 특정 문서 _id 다음 상기 갱신 방법

: ObjectId에 ("3")과 _id : ObjectId가 ("4") 예 : [{ "_id"ObjectId가 ("4"), "이름": "램",}]

나는이 같은 C#으로 노력 해요 :

  I updated ObjectId : 1 like Example child.$.Subchild.0.Name="Raghu" 
     But not Updated ObjectId : 4 like Example child.$.Subchild.3.Name="Ram"   

    MongoServerSettings settings = new MongoServerSettings(); 
     settings.Server = new MongoServerAddress("127.1.1.1", 27017); 
     MongoServer servers = new MongoServer(settings); 
     var db = servers.GetDatabase("StudentDB"); 
     MongoCollection<Student> pax; 
     pax = db.GetCollection<Student>("StudentDetails"); 
     IMongoQuery queryEdit = Query.EQ("Child.subchild._id", new ObjectId("4")); 
     var updateValues = new List<UpdateBuilder>(); 
     { updateValues.Add(Update.Set("child.$.Subchild.3.Name", "Ramu")); } 
     updateValues.Add(Update.Set("child.$.subchild.3.Age", 27)); 
     IMongoUpdate update = Update.Combine(updateValues); 
     SafeModeResult sm = pax.Update(queryEdit, update, UpdateFlags.None, SafeMode.True); 

답변

0

child.$.Subchild.0.Name="Raghu"은 첫 번째 배열 똥개에 대한 참조가 필요하지 않습니다 또는 두 번째 커서에 대한 참조가 필요합니다. MongodDB에 대한 child.Subchild.$.Name="Raghu"은 두 개의 참조 "$"를 업데이트하지 않습니다.

db.foo.update({_id:ObjectId(...),"child.Subchild.Name":"Ram"},{$set:{child.Subchild.$.Name="Raghu"}}); 
관련 문제