Вернуть счетчик подколлекции с результатом в MongoDB и отсортировать по возрастанию

У меня возникли проблемы с получением подсчета подколлекции с сортировкой результата по счету в порядке возрастания.

вот как моя коллекция scripts похоже:

{
    "_id" : ObjectId("58bbf0a4b14e5fc44d5e9393"),
    "label" : "Binarization",
    "name" : "nlbin",
    "require" : []
},
{
    "_id" : ObjectId("58bbfb5eb14e5fc44d5e9c87"),
    "label" : "Binarization",
    "name" : "jpeg",
    "require" : [ObjectId("58bbf0a4b14e5fc44d5e9393")]
},
{
    "_id" : ObjectId("58bbfb4db14e5fc44d5e9c76"),
    "label" : "Binarization",
    "name" : "pseg",
    "require" : [ObjectId("58bbf0a4b14e5fc44d5e9393"), ObjectId("58bbfb5eb14e5fc44d5e9c87")]
}

Так что проблема в том, что я хотел вернуть коллекции с количеством полей массива require и сортируйте их в порядке возрастания. Запрос, который я написал, был примерно таким:

db.getCollection('scripts').aggregate({ $unwind: "$require" },{ $sortByCount:"$require" },{$sort: {count: 1}})

Проблема в том, что он не возвращает желаемый результат, а возвращает мне что-то вроде этого:

{
    "_id" : ObjectId("58bbf0a4b14e5fc44d5e9393"),
    "count" : 2
},

{
    "_id" : ObjectId("58bbfb5eb14e5fc44d5e9c87"),
    "count" : 1
}

что совершенно неправильно, как ObjectId("58bbf0a4b14e5fc44d5e9393") должен иметь счет 0, Также коллекция с самым большим count (т.е. ObjectId("58bbfb4db14e5fc44d5e9c76")) даже не включен в результат.

Конечный результат должен быть таким:

{
    "_id" : ObjectId("58bbf0a4b14e5fc44d5e9393"),
    "count" : 0
},

{
    "_id" : ObjectId("58bbfb5eb14e5fc44d5e9c87"),
    "count" : 1
},
{
    "_id" : ObjectId("58bbfb4db14e5fc44d5e9c76"),
    "count" : 2
}

Надеюсь, вы, ребята, поняли, что я имел в виду

1 ответ

Решение

Лучшее, что вы можете сделать, это добавить дополнительное поле (используя $addFields) который держит require размер массива без необходимости $unwind а затем сортировать документы на основе этого поля, например,

db.getCollection('scripts').aggregate([
    { "$addFields": { "count": { "$size": "$require" } } },
    { "$sort": { "count": 1 } }
])
Другие вопросы по тегам