【问题标题】:Get maximum value for a field, but only with respect to other documents with the same value in another field [duplicate]获取一个字段的最大值,但仅针对在另一个字段中具有相同值的其他文档[重复]
【发布时间】:2020-01-17 10:59:38
【问题描述】:

我有这样的 mongodb 文档:

{'device':'A','value':12}
{'device':'A','value':13}
{'device':'A','value':14}
{'device':'B','value':4}
{'device':'B','value':5}

我想找

{'device':'A','value':14}
{'device':'B','value':5}

即对于每个device(此处为AB)具有最高value 的文档。

到目前为止,我所做的是在一个查询中找到所有不同的设备,然后获取每个设备的所有文档,以降序排序,限制为 1。但这需要大量查询。

有没有办法在一个查询中做到这一点?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您需要将$group 聚合运算符与$max 累加器一起使用。

    db.collection.aggregate([
      { "$group": {
        "_id": "$device",
        "value": {
          "$max": "$value"
        }
      }},
      { "$project": { "_id": 0, "value": 1, "device": "$_id" }}
    ])
    

    MongoPlayground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2011-02-06
      相关资源
      最近更新 更多