【问题标题】:how to find $avg and $sum for fields which contain NaN value in mongodb?如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?
【发布时间】: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 中是可能的
  • 我在问题中添加了一个示例文档。
  • @Joe 不幸的是,这是用于检查 python 范围内的变量。在这个问题中,我们需要通过 pymongo 发送条件,以便在 mongodb 中检查它。
  • NaN 是由 IEEE-754 定义的,您是否尝试用 python 语法而不是 javascript NaN 指定它?

标签: python mongodb aggregate pymongo nan


【解决方案1】:

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

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

【讨论】:

  • 这是一个有价值的答案。有用。好棒亲爱的肚皮,非常感谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 2011-10-02
  • 2023-03-21
  • 2022-12-22
  • 1970-01-01
相关资源
最近更新 更多