агрегировать в пн goose для неиспользуемых и недавних значений - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь получить последние данные из списка без дубликатов в пн. goose.

Набор данных:

{"_id":"3214242", "name": "google", "created":"20200411", "value": 23}
{"_id":"3214243", "name": "google", "created":"20200410", "value": 21}
{"_id":"3214244", "name": "microsoft", "created":"20200409", "value": 25}
{"_id":"3214245", "name": "apple", "created":"20200411", "value": 23}
{"_id":"3214246", "name": "microsoft", "created":"20200411", "value": 30}

Я хочу получить как неисчислимые имена с последним созданным. Ожидаемый пример вывода:

{"_id":"3214242", "name": "google", "created":"20200411", "value": 23}
{"_id":"3214245", "name": "apple", "created":"20200411", "value": 23}
{"_id":"3214246", "name": "microsoft", "created":"20200411", "value": 30}

Я пробовал с группой и агрегатами. Но не работает

db.aggregate(["$group": {"_id": {"name": $name, "value": "$value"}}, { "created": { "$max": "$created" }}])

По какой-то причине это, похоже, не работает. Я получаю все результаты. Может кто-то предложить? спасибо

1 Ответ

0 голосов
/ 12 апреля 2020

Вы можете $ отсортировать по created полю и затем запустить $ group , чтобы получить value и _id из поля с наибольшим created для каждого name:

db.collection.aggregate([
    { $sort: { created: -1 } },
    {
        $group: {
            _id: "$name",
            __id: { $first: "$_id" },
            created: { $first: "$created" },
            value: { $first: "$value" },
        }
    },
    {
        $project: {
            _id: "$__id",
            name: "$_id",
            created: 1,
            value: 1
        }
    }  
])

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

...