Пн go БД Порядок по количеству одинаковых полей - PullRequest
0 голосов
/ 09 марта 2020

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

У меня есть эта структура в моей коллекции:

{"_id":{"$oid":"5e65f973b4b37800170c850a"},

"todos":
[{"_id":{"$oid":"5e65f9a3b4b37800170c851e"},"title":"Hamburger","category":"Food"},
{"_id":{"$oid":"5e65f9b6b4b37800170c851f"},"title":"Pizza","category":"Food"},
{"_id":{"$oid":"5e65f9bdb4b37800170c8520"},"title":"Bread","category":"Food"}
,{"_id":{"$oid":"5e65f9c6b4b37800170c8521"},"title":"Basketball","category":"Sport"},
{"_id":{"$oid":"5e65f9cbb4b37800170c8522"},"title":"Football","category":"Sport"},
{"_id":{"$oid":"5e65f9cbb4b37800170c8524"},"title":"Paintball","category":"Hobby"}]
}

Моя предыдущая команда была такой:

User.aggregate([
            { $match: {_id: req.user._id}},
            { $unwind: '$todos'},
            { $sort: {'todos.category': 1}},
            {  $match : { 'todos.category':{ $exists: true, "$ne": null  }}},
            { $group: {_id: '$_id', 'category':{$sum:1},
            todo: {$push: '$todos'}}}

        ])

При этом я получил этот запрос обратно:

    {
    "todos": [
        {
            "_id": "5e65f973b4b37800170c850a",
            "category": 6,
            "todo": [
                {
                    "_id": "5e65f9a3b4b37800170c851e",
                    "title": "Pizza",
                    "category": "Food"
                },
  {
                    "_id": "5e65f9cbb4b37800170c8522",
                    "title": "Basketball",
                    "category": "Sport"
                },
                {
                    "_id": "5e65f9bdb4b37800170c8520",
                    "title": "Hamburger",
                    "category": "Food",
                },
                {
                    "_id": "5e65f9c6b4b37800170c8521",
                    "title": "Football",
                    "category": "Sport"
                },
                {
                    "_id": "5e65f9d2b4b37800170c8523",
                    "title": "Paintball",
                    "category": "Hobby"               
                },
  {
                    "_id": "5e65f9b6b4b37800170c851f",
                    "title": "Bread",
                    "category": "Food"
                },
          ]
        }
    ]
}

Но я бы хотел упорядочить документы по сумме того же поля "категория"

, чтобы оно выглядело так:

  {
    "todos": [
        {
            "_id": "5e65f973b4b37800170c850a",
            "category": 6,
            "todo": [
                {
                    "_id": "5e65f9a3b4b37800170c851e",
                    "title": "Pizza",
                    "category": "Food"
                },
                {
                    "_id": "5e65f9b6b4b37800170c851f",
                    "title": "Bread",
                    "category": "Food"
                },
                {
                    "_id": "5e65f9bdb4b37800170c8520",
                    "title": "Hamburger",
                    "category": "Food",
                },
                {
                    "_id": "5e65f9c6b4b37800170c8521",
                    "title": "Football",
                    "category": "Sport"
                },
                {
                    "_id": "5e65f9cbb4b37800170c8522",
                    "title": "Basketball",
                    "category": "Sport"
                },
                {
                    "_id": "5e65f9d2b4b37800170c8523",
                    "title": "Paintball",
                    "category": "Hobby"               
                }
          ]
        }
    ]
}
...