如何使用C#更新mongodb中的嵌入式文档

时间:2013-05-29 11:52:54

标签: c# mongodb c#-4.0 mongodb-.net-driver

我有一个集合,我正在进行插入/更新操作。对于插入我使用代码:

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字段。我正在尝试很多方法,但无法获得任何解决方案。请提出一些建议....即使我根据这一点得到了一些链接并尝试了......但是没有一个人在锻炼。

1 个答案:

答案 0 :(得分: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" }
}}};