MongoDB c# 驱动程序 SetWrapped 问题

本文关键字:问题 SetWrapped 驱动程序 MongoDB | 更新日期: 2023-09-27 18:32:42

** 更新了更多代码:

我有一个类似于

public class price
    {
        public decimal mrp { get; set; }
}

这是复杂文档的一部分,如下所示:

{
  "Name" : "Name",
  "_id" : ObjectId("522a83c2a833e20db4b028ea"),
  "price" : {
    "mrp" : 599,
  }
}

我正在使用 c# 驱动程序来更新此文档...如下所示:

检查文档中是否存在字段的函数私有布尔check_field(BsonDocument 文档,字符串field_name) { 如果(文档。包含(field_name)) { 返回真; } 还 { 返回假; } }

获取整个文档

foreach (var c in cursor)
            {
                product prd = new product();
                prd.id = check_field(c.ToBsonDocument(), "id") ? convertToString(c.ToBsonDocument()["id"]) : null;
                prd.price = check_field(c.ToBsonDocument(), "price") ? JsonConvert.DeserializeObject<price>(c.ToBsonDocument()["price"].ToString()) : null;
                products.Add(prd);
            } 
for (var i = 0; i < products.Count(); i++)
            {
                price price_list = new price();
    price_list.mrp = 500;
    MongoDB.Driver.Builders.UpdateBuilder update = MongoDB.Driver.Builders.Update.SetWrapped("price", (price)price_list);
            }

当我执行命令时,我希望$set命令发出为

{ "$set" : { "price" : { "mrp" : 500 }}}
but get this instead
{ "$set" : { "price" : { "mrp" : "599" }}}

任何帮助/指针都会很有帮助

MongoDB c# 驱动程序 SetWrapped 问题

最后,

当我将数据类型更改为双精度(或浮点数)时,它运行良好。十进制是 64 位 - 所以 mongo 将其存储为 NumberLong。