按属性子计数对mongo find()结果进行排序

时间:2018-11-29 09:45:56

标签: mongodb-query

我需要获取所有与“ propIds”列表匹配的文档,并希望按照结果具有多少子属性进行排序。

我的文档如下设置,每个文档可能包含零个或多个字段属性。

我希望对返回的集合进行排序,以使字段数最多的文档排在首位。

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

我能够创建像这样的find()查询:

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

,但是对结果进行排序很麻烦。

我一直在查看聚合运算符,但目前无法将我的find()逻辑(选择与ID列表匹配的文档)转换为也使用$ sortByCount聚合的聚合查询。 / p>

一个指向聚合器如何工作以及如何将find-logic转换为聚合查询的指针,将不胜感激。或一个指向如何按“字段”计数对查找查询进行排序的指针。

1 个答案:

答案 0 :(得分:0)

尝试这个:

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}

])