Python 如何使用pymongo从嵌套的字典数组中按字典中的值排序获得N个最后的项?

Python 如何使用pymongo从嵌套的字典数组中按字典中的值排序获得N个最后的项?,python,mongodb,pymongo,Python,Mongodb,Pymongo,我的mongo集合中有一个嵌套的字典数组 我根据数组的周期(5分钟、15分钟、30米等)使用新字典更新数组,并将字典附加到数组中 我需要通过“timestamp”查询数组排序,并获取最近的N个条目 我尝试了这个查询,从数组中得到了10个项目。但结果没有排序。我使用find_one(),因为只有一个文档具有相应的符号 timeframe = "5min" symbol = "EURUSD" data.find_one( {"$and": [

我的mongo集合中有一个嵌套的字典数组

我根据数组的周期(5分钟、15分钟、30米等)使用新字典更新数组,并将字典附加到数组中

我需要通过“timestamp”查询数组排序,并获取最近的N个条目

我尝试了这个查询,从数组中得到了10个项目。但结果没有排序。我使用find_one(),因为只有一个文档具有相应的符号

timeframe = "5min"
symbol = "EURUSD"
data.find_one(
            {"$and": [
                {"symbol": symbol},
                {timeframe: {"$exists": True}},
                {timeframe+".rates": {"$exists": True}}
            ]
            },
            {timeframe+".rates": {"$slice": 10}},           
            sort=[
                ("5min.rates.timestamp", pymongo.DESCENDING)
            ]
            )          
这是文档的结构:

{ _id
  symbol
  5min: {
         "last_refreshed": sometime,
         "rates": [ {
                     "timestamp":
                     "open":
                     "low":
                     "high":
                     "close":
                     },
                  ]
         }
  15min: {}
  ...
}

我使用了一个聚合来解决这个问题

symbol = "EURUSD"
timeframe = "5min"

pipeline = [
        {"$unwind": "$"+timeframe+".rates"},
        {"$match": {"symbol": symbol}},
        {"$sort": SON([(timeframe+".rates."+"timestamp", 1)])},
        {"$limit": 5}
    ]

pprint.pprint(list(raw_data.aggregate(pipeline)))


您需要使用带有$match、$unwind和$sort运算符的聚合管道。我尝试使用$group,但没有结果。在这种情况下,我应该如何使用$match?$match过滤掉您想要的记录,$unwind将数组转换为单个文档,$sort对输出进行排序。谢谢,我使用$match获得了正确的管道。