当前位置: 首页 > 知识库问答 >
问题:

MongoDB字符串转换为int

公孙和怡
2023-03-14

我想将MongoDB值字段的字符串转换为整数,然后计算平均值。

这是我的JSON:

"_id" : ObjectId("5c49f398fc0078178c76705b"),     // my json data
    "Time_Created" : ISODate("2019-01-24T17:19:20.205Z"),   // date
    "Test_ID" : "1",
    "data" : [
        {
            "Device_id" : "1",
            "Total_wires" : "5",
            "Cables" : [
                {
                    "TAG" : "4001",
                    "Value" : "24.3"
                },
                {
                    "TAG" : "4002",
                    "Value" : "21.3"
                },
                {
                    "TAG" : "4003",
                    "Value" : "21.3"
                },
                {
                    "TAG" : "4004",
                    "Value" : "21.3"
                },                                                            
                {
                    "TAG" : "4005",                                        
                    "Value" : "100.3"
                }
            ]
        }
    ]
}
db.collection_name.aggregate( [{  '$project': { 'values': '$data.Cables.Value', }}, { '$unwind': '$values' }, { '$addFields': { 'avgValue': { '$avg': { $toInt: '$values' } }  } } ] )
db.collection_name.aggregate( 
[{  '$project': { 'values': '$data.Cables.Value', }}, 
  { '$unwind': '$values' }, 
  { '$addFields': { 'avgValue': { '$avg': { 'input': '$values', 'to': 
  'int' } }  } } 
] )

但我也得到了这样的输出:

{“_id”:ObjectId(“5C509604FC007808C427EDCB”),“values”:
[“24.3”,“23.3”,“25.3”,“31.3”,“90.3”],“avgvalue”:null}

期望值应该是values字段的平均值。
我需要对嵌套文档值进行某种转换。

然后在C#代码中使用它来生成管道

var pipeline = new[] 
{ 
  project, unwind, addfields 
};

共有1个答案

欧阳杰
2023-03-14

使用todouble代替toint,因为您的值不是整数。尝试下面的阶段。

[
    {
        '$project': {
            'values': '$data.Cables.Value'
        }
    }, {
        '$unwind': {
            'path': '$values'
        }
    }, {
        '$project': {
            'values': {
                '$map': {
                    'input': '$values', 
                    'as': 'value', 
                    'in': {
                        '$toDouble': '$$value'
                    }
                }
            }
        }
    }, {
        '$addFields': {
            'avgValue': {
                '$avg': '$values'
            }
        }
    }
]
 类似资料:
  • 查询:{“日期”:{“$GTE”:“2021-07-22T03:00:00”,“$LTE”:“2021-07-23T03:00:00”},“isdeleted”:false},字段:{},排序:{} 将字符串转换为数据格式,如下所示,我只得到时间戳 DateFormat originalFormatData=new SimpleDateFormat(“yyyy-mm-dd't'hh:mm:ss”,

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 我只是无法在c中转换不同的数据类型,我知道c是一种强类型语言,所以我在这里使用了,但我面临一个问题,错误消息是 从“std::string{aka std::basic_string}类型转换为“int”类型的static_

  • 我正在使用Schembuf在带有套接字的计算机之间更改数据。要传输数据,我使用以下内容: 然而,我注意到Protobuf无法读取任何非int类型的接收数据(它将其分配给0)。果不其然,如果我不使用套接字,但试图用相同的代码片段返回消息,则会发生相同的情况: 我还指出: 那么,为什么我不能正确地将数据转换回字符串呢?如果这是一个参考问题,为什么protobuf不能读取字符数组数据或从字符数组转换的字

  • 问题内容: 我有一个BigDecimal对象,我想将其转换为字符串。问题是我的值得到了分数,我得到了一个很大的数字(长度),例如,我只需要字符串中的原始数字即可: 输出为: 我需要把输出准确地放在字符串中 问题答案: 要获得准确的结果,您需要使用String构造函数或(它基于double的规范表示构造一个BigDecimal): 问题在于参数是a ,并且恰巧双精度不能正确表示。因此,“转换”为最接

  • 注意:这个问题包含不建议使用的前1.0代码!不过,答案是正确的。 要在Rust中将转换为,我可以执行以下操作: 我知道如何将转换为的唯一方法是获取其中的一个片段,然后像这样使用: 有没有办法直接将转换为?