Как узнать количество чужих полей в mongodb, используя $ lookup? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть 2 коллекции (это образец, а не реальные данные) в 1-м отношении. Вот данные для сбора вопросов

[
    {
        "_id":"question1",
        "text":"test test test test"
    },
    {
        "_id":"question2",
        "text":"test test test test"
    },
    {
        "_id":"question3",
        "text":"test test test test"
    },
    {
        "_id":"question4",
        "text":"test test test test"
    }
]

, а вот данные для сбора ответов

[
    {
        "_id":'reply1',
        "questionId":"question1",
        "text":"Hello World1"
    },

    {
        "_id":'reply2',
        "questionId":"question1",
        "text":"Hello World1"
    },

    {
        "_id":'reply3',
        "questionId":"question2",
        "text":"Hello World1"
    },

    {
        "_id":'reply4',
        "questionId":"question3",
        "text":"Hello World1"
    },
]

когда я использую $ lookup, он объединяет 2 коллекции и дает мне этот результат

[
    {
        "_id":"question1",
        "text":"test test test test",
        "totalReplies":[{...},{...}]
    },
    {
        "_id":"question2",
        "text":"test test test test",
        "totalReplies":[{...}]
    },
    {
        "_id":"question3",
        "text":"test test test test",
        "totalReplies":[{...}]
    },
    {
        "_id":"question4",
        "text":"test test test test",
        "totalReplies":[]
    }
]

, но мне нужно получить счетчик чужого поля, а не массив содержит документы, которые я хочу результат будет таким:

[
    {
        "_id":"question1",
        "text":"test test test test",
        "totalReplies":2
    },
    {
        "_id":"question2",
        "text":"test test test test",
        "totalReplies":1
    },
    {
        "_id":"question3",
        "text":"test test test test",
        "totalReplies":1
    },
    {
        "_id":"question4",
        "text":"test test test test",
        "totalReplies":0
    }
]

есть ли вообще для этого?

1 Ответ

1 голос
/ 24 апреля 2020

Вы можете использовать $ размер :

db.collection.aggregate([
    // your current pipeline ($lookup)
    {
        $addFields: { totalReplies: { $size: "$totalReplies" } }
    }
])

Пн go Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...