【问题标题】:how to update mongo db all records in c#如何在 C# 中更新 mongo db 的所有记录
【发布时间】:2018-11-16 11:17:26
【问题描述】:

我有存储 JSON 的 mongo db 集合。 错误地,一个集合的所有记录中的一个元素值都被错误地更新了。

我将如何更新特定元素?

我的json是这样的

{
status:
   {
     name:"john",
     value: "12345678903333.444"
   }
}

这里的value属性值应该是long字段,value会被替换为

{
status:
   {
     "name":"john",
     "value": 1234567890
  }
} 

值应该被修剪为现有值的前 10 个字符。

更新后(来自@mickl 的回答),

转换为 Int 也会出错!

【问题讨论】:

    标签: c# mongodb mongodb-query mongodb-.net-driver mongodb-csharp-2.0


    【解决方案1】:

    您可以使用$substr 运算符和$toDouble 将字符串转换为数字,然后使用$out 将聚合结果重定向到同一个集合中(基本上会更新其所有文档),在Mongo shell 中尝试:

    db.col.aggregate([
        {
            $addFields: {
                "status.value": { $toDouble: { $substr: [ "$status.value", 0, 10 ] } }
            }
        },
        {
            $out: "col"
        }
    ])
    

    或者在 C# 代码中:

    var addFieldsBody = "{ $addFields: { \"status.value\": { $toDouble: { $substr: [ \"$status.value\", 0, 10 ] } } } }";
    
    Col.Aggregate()
       .AppendStage<BsonDocument>(BsonDocument.Parse(addFieldsBody))
       .Out("col");
    

    【讨论】:

    • 感谢@mickl 的回复。我已经在 Mongo shell 中尝试过您的查询。记录已更新。但它显示不同的格式。我附上了有问题的屏幕。
    • @PonmaniChinnaswamy 是您数据库中的 status.value 字符串还是数字?
    • 现有值为字符串。但我想将其更新为 int。有可能吗?
    • @PonmaniChinnaswamy 似乎你有一些科学记数法的值,所以我修改了我的答案,只是用 $toDouble 替换了 $toInt (应该处理这种格式)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2022-08-09
    • 2023-04-01
    相关资源
    最近更新 更多