Как подсчитать общее количество записей внутри данных с помощью агрегации $ group - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь выполнить запрос с использованием пакета golang mgo, чтобы эффективно получить аналогичные значения из агрегации $ group и подсчитать общее значение записи. Но я не могу получить общее количество записей для сгруппированных данных.Моя структура выглядит следующим образом:

{

    "data": [
        {
            "_id": 366,

            "logs": [
                {
                    "id": 113,
                    "booking_id": 366,
                    "provider_id": 13,
                    "cid": 11,
                    "type": "basic",
                    "time": 1542793756,
                },
                {
                    "id": 116,
                    "booking_id": 366,
                    "provider_id": 13,
                    "cid": 0,
                    "type": "type2",
                }


            ]
        },
        {
            "_id": 362,

            "logs": [
                {
                    "id": 104,
                    "booking_id": 362,
                    "provider_id": 7,
                    "cid": 10,
                    "type": "basic",
                    "time": 1542776677,
                }
            ]
        },

        {
            "_id": 370,

            "logs": [
                {
                    "id": 111,
                    "booking_id": 370,
                    "provider_id": 9,
                    "cid": 11,
                    "type": "basic",
                    "time": 1542792661,
                },
                {
                    "id": 112,
                    "booking_id": 370,
                    "provider_id": 11,
                    "cid": 11,
                    "type": "basic",
                    "time": 1542793185,
                }
            ]
       }

    ],
     "total_record": 2
   }

Для этого я хочу, чтобы общее количество предустановок записей внутри данных ::

"total_record":3 

Запрос, который я использую: *

query := []bson.M{
        {"$group": bson.M{
        "_id":  "$booking_id",
        "logs": bson.M{ "$push": "$$ROOT" }
        "count": bson.M{"$sum":1},
        }},
    }

    pipe := getCollection.Pipe(query)
    err = pipe.AllowDiskUse().One(&result)

Я хочу общее количество этого результата.В разделе журнала есть данные с дублированными бронированиями с различными значениями «provider_id», но я сгруппировал все подобные данные booking_id в одном документе и показываю их количество.Возможно ли с агрегацией $ group?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете использовать $ count агрегацию, чтобы найти общее количество записей внутри данных, link

Чтобы рассчитать общее количество сгруппированных данных, вы можете использовать $ count агрегацию после группировки данных.Ваш запрос должен быть таким, если вы хотите общее количество data ::

query := []bson.M{
        {"$group": bson.M{
        "_id":  "$booking_id",
        }},
        {"$count" : "count"},
    }

    pipe := getCollection.Pipe(query)
    err = pipe.AllowDiskUse().One(&result)

Для вычисления записей внутри каждого "logs" вы можете использовать запрос следующим образом: *

query := []bson.M{
        {"$group": bson.M{
        "_id":  "$booking_id",
        "logs": bson.M{ "$push": "$$ROOT" },
        "count": bson.M{"$sum":1},
        }},
    }

    pipe := getCollection.Pipe(query)
    err = pipe.AllowDiskUse().One(&result)
...