如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?

Posted

技术标签:

【中文标题】如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?【英文标题】:how to find $avg and $sum for fields which contain NaN value in mongodb? 【发布时间】:2021-12-25 22:34:18 【问题描述】:

当我使用 mongo cli 或 javascript 时,我可以在 mongodb 中使用 $group 子句之前找到并限制包含 NaN 值的列。但是,当我使用 python 及其主要库“pymongo”时,它似乎无法做到这一点。如下代码 NaN 不是 python 语法的一部分。而在 javaScript 中它是简单直接的。有没有人有同样的问题?

javascript

db.getCollection('plan.data_pool').aggregate([
                                     '$match':geoid:'00','v':"$ne":NaN,"$group":"_id":"$accountable_id","agg":"$sum":"$v"

])

python (pymongo)

db['plan.data_pool'].aggregate(['$match':geoid:'00','v':"$ne":NaN,
"$group":"_id":"$accountable_id","agg":"$sum":"$v"

data_pool集合的示例文档是这样的:


    "_id" : ObjectId("619149fa0f91f1b3954f7128"),
    "opg" : "sum",
    "opt" : "sum",
    "code" : "9-8-1-1-1-7",
    "responsible" : [ 
        "61"
    ],
    "parent_id" : "610a6abb566701e77a214355",
    "accountable_id" : "59",
    "data_item" : "610a6c49566701e77a21435c",
    "geoid" : "HQ",
    "year" : 2019 ,
    "period" : "3M",
    "tf" : 3,
    "w" : 100.0,
    "p" : 6.0,
    "v" : NaN,
    "r" : 33.3333333333333,
    "plan" : "60d2ce9cc0b1f833dbd9563a"

【问题讨论】:

你能分享一个来自data_pool集合的示例文档吗?我认为这在 python 中是可能的 我在问题中添加了一个示例文档。 这有帮助吗:***.com/questions/944700/… @Joe 不幸的是,这是用于检查 python 范围内的变量。在这个问题中,我们需要通过 pymongo 发送条件,以便在 mongodb 中检查它。 NaN 是由 IEEE-754 定义的,您是否尝试用 python 语法而不是 javascript NaN 指定它? 【参考方案1】:

MongoDB 中的 NaN 值在 pymongo 中由 float('NaN') 表示,因此您可以使用:

'v': '$ne': float('NaN')

【讨论】:

这是一个有价值的答案。有用。好棒亲爱的肚皮,非常感谢你。

以上是关于如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?的主要内容,如果未能解决你的问题,请参考以下文章

如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?

为啥 mongodb 查询在数组中查找具有两个值的文档不起作用?

如何将包含 float 和 nan 值的 Dataframe 转换为 datetime python?

如何获取numpy数组中所有NaN值的索引列表?

如何在mongodb中获取包含某些(字符串)值的集合的所有键

缺失值(NaN 值)与填充值的重叠图