使用mongodb中的聚合获取所有具有最大值的文档

用户名

我想获取特定字段中具有最高价值的“所有文档”,而不是按另一个字段分组。

考虑以下数据:

_id:1, country:india,  quantity:12,  name:xyz
_id:2, country:USA,    quantity:5,   name:abc
_id:3, country:USA,    quantity:6,   name:xyz
_id:4, country:india,  quantity:8,   name:def
_id:5, country:USA,    quantity:10,  name:jkl
_id:6, country:india,  quantity:12,  name:jkl

答案应该是

country:india max-quantity:12
name xyz
name jkl 

country:USA max-quantity:10
name jkl

我已经尝试了几个查询,但是我只能获得没有名称的最大值,或者我可以分组,但它会显示所有值。

db.coll.aggregate([{
    $group:{
        _id:"$country",
        "maxQuantity":{$max:"$quantity"}
    }
}])

例如,上面将给出每个国家/地区的最大数量,但如何与其他字段组合以显示所有最大数量的单据。

布雷克七

If you want to keep document information, then you basically need to $push it into an array. But of course, then having your $max values, you need to filter the contents of the array for just the elements that match:

db.coll.aggregate([
    { "$group":{ 
        "_id": "$country",
        "maxQuantity": { "$max": "$quantity" },
        "docs": { "$push": {
            "_id": "$_id",
            "name": "$name",
            "quantity": "$quantity"
        }}
    }},
    { "$project": {
        "maxQuantity": 1,
        "docs": {
            "$setDifference": [
               { "$map": {
                   "input": "$docs",
                   "as": "doc",
                   "in": {
                       "$cond": [ 
                           { "$eq": [ "$maxQuantity", "$$doc.quantity" ] },
                           "$$doc",
                           false
                       ]
                   }
               }},
               [false]
            ]
        }
    }}
])

So you store everything in an array and then test each array member to see if it's value matches the one that was recorded as the maximum, discarding any that do not.

I'd keep the _id values in the array documents since that is what makes them "unique" and won't be adversely affected by $setDifference when filtering out values. But of course if "name" is always unique then it won't be required.

You can also just return whatever fields you want from $map, but I'm just returning the whole document for example.

请记住,这样做的局限性是不超过16MB的BSON大小限制,因此对于小数据样本也可以,但是任何产生潜在大列表(因为您无法预先过滤数组内容)的方法都可以使用分别查询以查找“ max”值,另一个查询以获取匹配的文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用mongodb中的聚合获取所有具有最大值的文档

来自分类Dev

获取具有MongoDB中字段最大值的文档

来自分类Dev

使用MongoDB聚合返回数字字段具有最大值的文档

来自分类Dev

在二维网格(多维列表)中获取具有最大值的所有图块

来自分类Dev

获取R向量中的所有最大值索引

来自分类Dev

从Angular中的对象获取具有最大值的元素

来自分类Dev

从SELECT查询中获取具有最大值的记录

来自分类Dev

在MySQL中获取具有最大值的条目

来自分类Dev

如何使用Python获取具有最大值的行?

来自分类Dev

获取具有最大值的行

来自分类Dev

如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

来自分类Dev

如何在MongoDB中为每个唯一值分组并获取具有最大日期的文档

来自分类Dev

使用LINQ从列表中获取具有特定属性最大值的对象

来自分类Dev

使用awk,uniq和sort获取列中具有最大值的行

来自分类Dev

使用EXISTS来获取给定列中具有最大值的行

来自分类Dev

使用LINQ从列表中获取具有特定属性最大值的对象

来自分类Dev

MySQL的。我想获取具有特定日期的所有行的最大值,并使用相应的字段

来自分类Dev

使用groupby的数据框中的所有最大值

来自分类Dev

每个组的Mongodb查找具有特定字段最大值(argmax)的文档

来自分类Dev

PostgreSQL-获取具有最小最大值的所有行

来自分类Dev

从 Scala 映射中获取所有具有最大值的键值对

来自分类Dev

使用mongodb中的聚合获取包含多个字段的最大值的对象

来自分类Dev

检索具有最大值的行中的所有值

来自分类Dev

查找数组中的最大值与查询匹配的所有Mongo文档

来自分类Dev

mongodb从所有文档中获取所有子文档

来自分类Dev

mongodb如何获取每个“具有相同键的组”的最大值

来自分类Dev

弹性获取具有最小值/最大值和最后一个值的文档

来自分类Dev

从 MySQL 到 Mongoose:聚合文档,所有行中两个值的最大乘积

来自分类Dev

从对象列表中获取具有最大值的对象的最有效方法

Related 相关文章

  1. 1

    使用mongodb中的聚合获取所有具有最大值的文档

  2. 2

    获取具有MongoDB中字段最大值的文档

  3. 3

    使用MongoDB聚合返回数字字段具有最大值的文档

  4. 4

    在二维网格(多维列表)中获取具有最大值的所有图块

  5. 5

    获取R向量中的所有最大值索引

  6. 6

    从Angular中的对象获取具有最大值的元素

  7. 7

    从SELECT查询中获取具有最大值的记录

  8. 8

    在MySQL中获取具有最大值的条目

  9. 9

    如何使用Python获取具有最大值的行?

  10. 10

    获取具有最大值的行

  11. 11

    如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

  12. 12

    如何在MongoDB中为每个唯一值分组并获取具有最大日期的文档

  13. 13

    使用LINQ从列表中获取具有特定属性最大值的对象

  14. 14

    使用awk,uniq和sort获取列中具有最大值的行

  15. 15

    使用EXISTS来获取给定列中具有最大值的行

  16. 16

    使用LINQ从列表中获取具有特定属性最大值的对象

  17. 17

    MySQL的。我想获取具有特定日期的所有行的最大值,并使用相应的字段

  18. 18

    使用groupby的数据框中的所有最大值

  19. 19

    每个组的Mongodb查找具有特定字段最大值(argmax)的文档

  20. 20

    PostgreSQL-获取具有最小最大值的所有行

  21. 21

    从 Scala 映射中获取所有具有最大值的键值对

  22. 22

    使用mongodb中的聚合获取包含多个字段的最大值的对象

  23. 23

    检索具有最大值的行中的所有值

  24. 24

    查找数组中的最大值与查询匹配的所有Mongo文档

  25. 25

    mongodb从所有文档中获取所有子文档

  26. 26

    mongodb如何获取每个“具有相同键的组”的最大值

  27. 27

    弹性获取具有最小值/最大值和最后一个值的文档

  28. 28

    从 MySQL 到 Mongoose:聚合文档,所有行中两个值的最大乘积

  29. 29

    从对象列表中获取具有最大值的对象的最有效方法

热门标签

归档