Python 如何使用pymongo从嵌套的字典数组中按字典中的值排序获得N个最后的项?
我的mongo集合中有一个嵌套的字典数组 我根据数组的周期(5分钟、15分钟、30米等)使用新字典更新数组,并将字典附加到数组中 我需要通过“timestamp”查询数组排序,并获取最近的N个条目 我尝试了这个查询,从数组中得到了10个项目。但结果没有排序。我使用find_one(),因为只有一个文档具有相应的符号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": [
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获得了正确的管道。