mongodb:每n个元素对数组元素进行分组

时间:2018-05-11 16:45:12

标签: mongodb

我有mongodb中的数据:

    {
        "_id" : abc,

        "someField" : [ 
            11.5, 
            8, 
            7, 
            9, 
            9.5, 
            5, 
            5.5, 
            10, 
            8, 
            9, 
            5, 
            6, 
            8, 
            8.5, 
            3.5, 
            4, 
            11.5, 
            6, 
            5.5, 
            8, 
            10.5, 
            10.5, 
            5.5, 
            4, 
            11.5, 
            9.5, 
            8.5, 
            4.5 ],
firstDate : ISODate("2017-03-10T12:00:00.000Z")
    } 

我使用索引来使用firstdate获取特定日期。
数据每六个小时存储一次,我可以将这些数据按每4个值分组,因为它将是一天。

聚合后,它应该是:

   {
        "_id" : abc,

        "someField" : [ 
            11.5, 
            10, 
            9,
            8.5,
            11.5,
            10.5,
            11.5
              ]
}

1 个答案:

答案 0 :(得分:2)

您可以在下面进行汇总:

db.col.aggregate([
    { $match:  { _id: "abc" } },
    {
        $project: {
            items: {
                $map: {
                    input: { $range: [ 0, { $ceil: { $divide: [ { $size: "$someField" }, 4 ] } } ]  },
                    as: "index",
                    in: {
                        $max: {
                            $slice: [ "$someField", { $multiply: [ "$$index", 4 ] }, 4 ]
                        }
                    }
                }
            }
        }
    }
])

$map在这种情况下采用7元素数组,即数组的$size除以4.因此,您将得到[0,1,2 .., 7]。然后,您可以使用该数组作为$slice的输入来获取4元素数组。每个数组都可以是$max的输入。

结果你会得到:

{ "_id" : "abc", "items" : [ 11.5, 10, 9, 8.5, 11.5, 10.5, 11.5 ] }