我将每个日期的价格变化数据存储在 MongoDB 中,如下所示:
{ "_id" : "A1",
"Price" :
{
"2020-08-25": {"P" : [1200, 1300, 1250]},
"2020-08-26": {"P" : [1310, 1400, 1200]},
"2020-08-27": {"P" : [1500, 1300, 1300]},
...
}
},
{ "_id" : "A2",
"Price" :
{
"2020-08-25": {"P" : [1200, 1300, 1250]},
"2020-08-26": {"P" : [1310, 1400, 1200]},
"2020-08-27": {"P" : [1500, 1300, 1300]},
...
}
}
现在,我想获取所有日期的最高价格。如何在不在查询中写入每个日期字段的情况下执行此操作?我的意思是,对于像“2020-08-25”这样的特定日期,有人可以使用 $group 和 $max 来获取该日期的最大价格值。但是,如何编写查询来获取所有日期中的最大价格值?
谢谢
最佳答案
要获取集合中所有日期的最高价格,您需要运行聚合操作,首先获取每个文档的最高价格,这可以使用 $max
来实现和 $map
运算符创建价格值数组,可以轻松推断出最大值。
要获取数组值,您首先需要使用 $objectToArray
将 Price
文档转换为日期和价格的键/值对数组。
db.getCollection('collection').aggregate([
{ '$set': {
'maxPricePerDocument': {
'$max': {
'$map': {
'input': { '$objectToArray': '$Price' },
'in': { '$max': '$$this.v.P' }
}
}
}
} },
{ '$group': {
'_id': 0,
'maxPriceForEntireCollection': { '$max': '$maxPricePerDocument' }
} }
])
关于mongodb - 如何获取和使用 MongoDB 中的字段名称列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63614010/