2013-05-29 3 views
0

나는 삽입/업데이트 작업을 수행하는 컬렉션이 하나 있습니다. 삽입을 위해 나는 코드를 사용한다 :C#을 사용하여 mongodb에 삽입 된 문서를 업데이트하는 방법

MongoCollection<BsonDocument> tblCity = mydb.GetCollection<BsonDocument>("tblCity"); 
BsonDocument CollectionCity = new BsonDocument { 
        { "CityCode", cityCode }, 
        { "CityName", cityName }, 
        { "stamps" , new BsonDocument { 
         {"ins", DateTime.Now}, 
         {"upd", ""}, 
         {"createUsr", UserId}, 
         {"updUsr", ""}, 
         {"Ins_Ip", ""}, 
         {"Upd_IP", GetIP()} 
         } 
        } 
       }; 
     tblCity.Insert(CollectionCity); 

잘 작동하고있다.

MongoCollection <BsonDocument> tblCity = mydb.GetCollection<BsonDocument>("tblCity"); 
var query = new QueryDocument { { "City_strCode", cityCode } }; 
var update = new UpdateDocument { 
    { "$set", new BsonDocument("City_strName", cityName) }, 
    { "stamps" , new BsonDocument{ 
     {"upd", DateTime.Now}, 
     {"updUsr", ""}, 
     {"Upd_IP", GetIP() 
    }} 
}}; 

tblCity.Update(query, update); 

을하지만 문제는 밖으로는 ins 날짜를 변경하여 내가 upd 필드를 업데이트 할 것입니다 :하지만 난 코드를 사용하고 업데이트하고있다. 그러나 ins 필드를 제거하고 upd 필드를 업데이트하고 있습니다. 나는 많은 방법을 시도하고 있지만 어떤 해결책도 얻을 수 없습니다. 제발 뭔가를 제안 .... 심지어이 링크를 기반으로하고 시도 ..하지만 그들 중 누구도 운동.

+0

당신이 점 표기법을 사용하여 시도 가지고 있습니까? 예 :' "stamps.upd"'? 기존 코드가 전체'stamps' 필드를 새 문서로 덮어 쓰고 있습니다. – WiredPrairie

+0

@ WiredPrairie : 나중에 나는 "stamps.upd"와 같은 시도를했지만 별도의 필드로 간주합니다. "stamps.upd"는 mongo 쉘에서 직접 작동하지만 C# 코드에서는 작동하지 않습니다 – HomeWork

+0

@WiredPrairie : 감사합니다 Yaar Bellow code fin ... 고마워요. – HomeWork

답변

0

$set 및 검색어를 수정해야합니다.

쿼리가 삽입 된 문서의 필드 이름과 일치하지 않습니다.

var query = new QueryDocument { { "CityCode", cityCode } }; 

당신이 $set를 사용하는 경우, 당신은 BsonDocument의 일환으로 변경할 필드를 모두 통과 : (.) ​​

var query = new QueryDocument { { "CityCode", cityCode } }; 
var update = new UpdateDocument { 
     { "$set", new BsonDocument { 
     { "CityName", "San Fran"}, 
     { "stamps.upd" , DateTime.Now()}, 
     { "stamps.updUsr", ""}, 
     { "stamps.Upd_IP", "10.0.0.1" } 
}}}; 
관련 문제