2013-05-29 6 views
0

У меня есть одна коллекция, в которой я делаю операцию вставки/обновления. для ввода i используйте код:Как обновить встроенный документ в mongodb с помощью C#

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 "'? Ваш существующий код переписывает все поле «штампы» новым документом. – WiredPrairie

+0

@WiredPrairie: Я пробовал то же самое «stamps.upd», но он рассматривает это как отдельное поле. «stamps.upd» работает непосредственно в оболочке mongo, но в коде C# он не работает – HomeWork

+0

@WiredPrairie: Спасибо Yaar Bellow code working 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" } 
}}}; 
Смежные вопросы