【问题标题】:Return a max value of an array with aggregate request in mongodb在 mongodb 中返回具有聚合请求的数组的最大值
【发布时间】:2013-07-23 01:21:16
【问题描述】:

你好,我有这个 json

db.people.insert({
    "ad" : "noc2",
    "createdDate" : ISODate(),
    "list" : [
            {
                    "id" : "p45",
                    "date" : ISODate("2014-01-01T12:18:30.568Z"),
                    "value3" : 21,
                    "value1" : 77,
                    "value2" : 489
            },
            {
                    "id" : "p6",
                    "date" : ISODate("2013-07-18T12:18:30.568Z"),
                    "value3" : 20,
                    "value1" : 20,
                    "value2" : 7
            },
            {
                   "id" : "4578",
                    "date" : ISODate("2013-07-18T12:18:30.568Z"),
                    "value3" : 21,
                    "value1" : 300,
                    "value2" : -319
            }
   ]

})

我想获得我的数组的最大值。例如,我想要一个 json 作为 这个:

“结果”:[ { “_id”:“p45”, “价值”:587 } ]

我的聚合请求不起作用是: db.test1.aggregate({$match: "ad":"noc2"},{$unwind: '$list'},{$group: {_id: '$ad', list: {recommand: {$max: '$list'}}}});

【问题讨论】:

    标签: arrays mongodb sorting max


    【解决方案1】:

    答案包含查询语法中的几个问题,但大多数情况下它都有效。您可以在下面找到固定查询:

    db.people.aggregate(
      {$match:{ad:"noc2"}},
      {$unwind:"$list"},
      {$project:{_id:0, _id:"$list.id", "value":{$add:["$list.value1","$list.value2","$list.value3"]}}},
      {$sort:{value:-1}},
      {$limit:1}
    );
    

    【讨论】:

    • 感谢您的回复,但如果我有太多的价值,我怎么能不写我的数组中的所有值?因为我不能这样做,因为我必须保留值名称和他的值,并且值名称可以更改。其次,可能是我有五万个值
    【解决方案2】:

    试试这个:

    db.people.aggregate([
      {$match:{ad:"noc2"}},
      {$unwind:"$list"},
      {$project:{_id:0, _id":"$list.id", "value":{$add:["$list.value1","$list.value2","$list.value3"]}}},
      {$sort:{value:-1},
      {$limit:1}
    ])
    

    输出:

    { "result" : [ { "_id" : "p45", "value" : 587 } ], "ok" : 1 }
    

    【讨论】:

    • 感谢您的回复,但如果我有太多的价值,我怎么能不写我的数组中的所有值?
    • 也许最好将它们全部放在一个数组中,例如"values": [21, 77, 489, ...],然后将它们相加......
    • 我不能这样做,因为我必须保留值名称和他的值,并且值名称可以更改。其次,可能是我有五万个值。
    猜你喜欢
    • 2015-01-04
    • 2014-12-12
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2018-07-03
    • 2023-03-05
    相关资源
    最近更新 更多