Сортировать результат поиска Монго по свойству child-count - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужно выбрать все документы, которые соответствуют списку «propIds», и я хочу отсортировать результаты по количеству дочерних свойств.

Мои документы настроены следующим образом, каждыйдокумент может содержать ноль или более свойств полей.

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

{
  "propId" : 7,
  "fields" : {
    "fieldname1" : "fieldvalue1",
    ...
  }
}

Я могу создатьзапрос find () выглядит следующим образом:

db.getCollection('col').find({"propId" : {"$in" : [7, 8, 9]}})

, но сортировка результатов затрудняется.

Я просматривал статистический оператор, но в настоящее время не могупреобразовать мою логику find () (выбирая документы, которые соответствуют списку идентификаторов) в агрегированный запрос, который также использует агрегацию $ sortByCount.

Указатель на работу агрегатора и на то, как я могу преобразовать поиск-Логический в совокупный запрос, будет оцененИли указатель на то, как я могу отсортировать поиск-запрос по количеству «полей».

1 Ответ

0 голосов
/ 30 ноября 2018

Попробуйте это:

let query = { propId: { $in : [7, 8, 9] } }; 

let result = await Collection.aggregate([
{$match: query},
{$project: { propId: 1, fields: 1, fieldArray: {$objectToArray: '$fields'} } },
{$project: { propId: 1, fields: 1, size: {$size: '$fieldArray'} } },
{$sort: size}

])

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