python - 使用 $set 和aggregate 更新 MongoDB 集合

标签 python mongodb aggregate pymongo updates

我需要将提交的 timestamp_ms 类型从 string 更改为 double 并创建 FixedDate 字段,该字段为基于这个新的 timestamp_ms 字段。然后,将 NewDate 字段中的时间戳信息更改为 ISO 日期。

我使用了这段代码:

collection.update({
    "FixedDate": {"$exists": False}
},[{
    "$set":
        {"FixedDate":
            {"$convert":
                {"input": "$timestamp_ms",
                "to": "double"
                }
            }
        }
    },
    {"$set":
        {"NewDate":
                {"$toDate": "$FixedDate"
                }
            }
    }
], multi=True)

它给出了这个错误消息:

TypeError: document must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping

我的数据如下所示:

{'_id': ObjectId('5afea920d326051990a7f337'), 'created_at': 'Fri May 18 10:21:07 +0000 2018', 'timestamp_ms': '1526638867739'}
{'_id': ObjectId('5afea920d326051990a7f339'), 'created_at': 'Fri May 18 10:21:08 +0000 2018', 'timestamp_ms': '1526638868310'}
{'_id': ObjectId('5afea972d326051c5c05bc11'), 'created_at': 'Fri May 18 10:22:30 +0000 2018', 'timestamp_ms': '1526638950799'}
{'_id': ObjectId('5afea974d326051c5c05bc16'), 'created_at': 'Fri May 18 10:22:32 +0000 2018', 'timestamp_ms': '1526638952160'}
{'_id': ObjectId('5afea974d326051c5c05bc17'), 'created_at': 'Fri May 18 10:22:32 +0000 2018', 'timestamp_ms': '1526638952841'}

最佳答案

看起来您有几个问题,第一是您没有使用 4.2 的最新驱动程序(它仍处于测试阶段,因此如果您刚刚进行了 pip 升级,您仍然会使用 3.8,并且需要 3.9)。安装最新的 python -m pip install https://github.com/mongodb/mongo-python-driver/archive/3.9.0b1.tar.gz 至少在正式发布之前是这样。

其次,您应该使用update_oneupdate_many而不是updatemulti标志。

使用最新版本尝试您的代码,这有效:

collection.update_many(
   {"FixedDate": {"$exists": False}},
   [{"$set":{
      "FixedDate":{"$toDouble":"$timestamp_ms"}
  }},
  {"$set":{
      "NewDate": {"$toDate": "$FixedDate"}
  }}
])

关于python - 使用 $set 和aggregate 更新 MongoDB 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57211793/

相关文章:

python - 删除不同Json列表python中的重复值

MongoDB:使用 $concat 更新字段值时出现问题

node.js - 转换错误 : Cast to ObjectId failed at path "_id"

python - 使用mongo-connector的部分单词搜索在Elasticsearch(elasticsearch-py)中不起作用

php - 在 MySQL 和 PHP 中使用聚合字符串函数

python - 如何使用 fields.function?

python - 使用 pandas 将日期、时间和纳秒解析为日期时间对象

基于 Python 的 vba 自动化?

PostgreSQL:聚合成数组并连接

mysql - 创建未分组的元素总和