MognoDB - Совокупное количество массивов на основе даты - PullRequest
0 голосов
/ 10 апреля 2019

Итак, я пытаюсь сделать запрос агрегации. У меня есть документы, которые выглядят так:

{
    "_id": ObjectId(),
    "value": [1,2],
    "date": ISODate("2016-06-02T03:02:00.000Z")
},
{
    "_id": ObjectId(),
    "value": [1,2],
    "date": ISODate("2016-06-06T03:02:00.000Z")
},
{
    "_id": ObjectId(),
    "value": [3,2],
    "date": ISODate("2017-04-06T03:02:00.000Z")
}

Я хочу посчитать, сколько раз один и тот же массив, value происходил в определенный год-месяц.

Я получил дату, написав эту агрегацию:

{
    "$group":
    {
        '_id':
        {
            "$dateToString":
            {
                "format": "%Y-%m",
                "date": "$launch_time"
            }
        }
    }
},
{
    "$sort":
    {
        "_id": -1
    }
},
{
    "$project":
    {
        "date": "$_id",
        "_id": 0,
    }
}

Что дает мне результат:

{'date': '2016-04'} ..so on

И мне удалось посчитать массивы с помощью:

{
    "$group":
    {
        "_id": "$home_coordinates",
        "count":
        {
            "$sum": 1
        }
    }
}

Что дает мне вывод:

{'_id': [1,2], 'count': 2} ..so on

Как мне объединить эти 2 так, чтобы мой результат выглядел следующим образом?

{
    "date": "2016-06",
    "value": [1,2],
    "count": 2
},
{
    "date": "2017-04",
    "value": [3,2],
    "count": 1
}

Следовательно, как мне посчитать аналогичные массивы на основе date ?

1 Ответ

0 голосов
/ 10 апреля 2019

Попробуйте с этим

db.collection.aggregate([
{
$addFields:{
    date:{ $substr: ["$date", 0, 10] }

    }
},
{
$group:{
    _id:"$date",
    date:{$first:"$date"},
    value:{$first:"$value"},
    count:{$sum:1}
    }
}
])
...