使用 pymongo 在 mongodb 中按多个值分组
Posted
技术标签:
【中文标题】使用 pymongo 在 mongodb 中按多个值分组【英文标题】:Group by multiple values in mongodb with pymongo 【发布时间】:2021-07-08 17:16:40 【问题描述】:我有这个query
,我想要group by
"$dateToString": "format": "%Y-%m-%d ", "date": "$first"
和"id13":"$samples.id13"
mydb1.mongodbbuckethour.aggregate([
"$match":
"first": "$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte" :datetime.strptime("2020-12-31 23:00:00", "%Y-%m-%d %H:%M:%S")
,
"$unwind": "$samples" ,
"$match":
"first": "$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte" :datetime.strptime("2020-12-31 23:00:00", "%Y-%m-%d %H:%M:%S")
,
"$group":
"_id": "$dateToString": "format": "%Y-%m-%d ", "date": "$first" ,"id13":"$samples.id13"
,
"$project":
"_id": 0,
"day":"$_id",
,
"$sort": "day": -1
])
output
说:
An object representing an expression must have exactly one field: $dateToString: format: "%Y-%m-%d ", date: "$first" , id13: "samples.id13"
我究竟做错了什么?
提前致谢!
【问题讨论】:
【参考方案1】:我相信错误来自$dateToString
的使用,因为这是一个表达式,您不能为其包含对象指定任何进一步的对象键。您可能想要做的是将 $dateToString
表达式分配给专用字段,在此示例中为 date
:
"$group":
"_id":
"date": "$dateToString": "format": "%Y-%m-%d ", "date": "$first",
"id13": "$samples.id13"
【讨论】:
您好!!感谢您的帮助!我认为它不起作用。它说排序超出了 104857600 字节的内存限制,但没有选择外部排序。 这听起来像是一个后续问题。您可以查看如何为 mongodb 查询启用外部排序以解决此问题,因为您的查询似乎需要对大量数据进行排序。如果这是一个重复查询,您可能还需要考虑添加适当的索引以避免昂贵的排序操作 。我认为问题出在我的项目函数中。现在有了你告诉我的改变:“$project”:“_id”:0,“day”:“$date " , "$sort": "date": -1以上是关于使用 pymongo 在 mongodb 中按多个值分组的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB:使用pymongo在一个集合中删除多个文档中的数组值
使用 pymongo 运行多个更新语句时,有时 MongoDB 不会更新