Я бы хотел заказать свою коллекцию по количеству полей с одинаковым значением. Я попробовал несколько вещей с помощью метода агрегации, но у меня ничего не работает.
У меня есть эта структура в моей коллекции:
{"_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"
}
]
}
]
}