mongodb - 如何获取和使用 MongoDB 中的字段名称列表?

标签 mongodb mongodb-query aggregation-framework

我将每个日期的价格变化数据存储在 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运算符创建价格值数组,可以轻松推断出最大值。

要获取数组值,您首先需要使用 $objectToArrayPrice 文档转换为日期和价格的键/值对数组。

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/

相关文章:

mongodb - Golang - MongoDB (mgo) 检索插入的文件(BSON 不是 GridFS)

mongodb - 如何检查是否存在多个文档

mongodb - 在一个查询中计算和匹配相关文档

MongoDB 聚合 $project

mongodb - 我在哪里可以下载 64 位 ubuntu/linux 中的 pymongo

node.js - 如何使用 MongoDB 和 Mongoose for Node.js 存储线程评论?

mongodb - 如何在 MongoDB 中查询多个嵌套数据字段

mongodb - 如何将 Mongoose 聚合结果转换为特定的文档模式类型?

node.js - 是否可以在 Express 中使特定用户的 session 数据无效或删除?

mongodb - 在 MongoDB 中按子字符串对值进行分组