使用 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 不会更新

MongoDB/PyMongo:查询多个条件 - 意外结果

pymongo:如何从 mongodb 的字段中获取多个结果?

更新嵌套的 MongoDB 集合 (Pymongo)

使用多个字段在 MongoDB 聚合框架中按相关性排序