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

本文关键字:嵌入式 文档 mongodb 何使用 更新 | 更新日期: 2023-09-27 18:15:47

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

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字段。我尝试了很多方法,但没有得到任何解决方案。请建议....甚至我得到了一些基于此的链接,并尝试…

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

您需要修复对$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" }
}}};