mongodb: группировать элементы массива по каждому n элементам - PullRequest
0 голосов
/ 11 мая 2018

У меня есть данные в 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 голосов
/ 11 мая 2018

Вы можете ниже следующую агрегацию:

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 ] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...