我需要获取所有与“ propIds”列表匹配的文档,并希望按照结果具有多少子属性进行排序。
我的文档如下设置,每个文档可能包含零个或多个字段属性。
我希望对返回的集合进行排序,以使字段数最多的文档排在首位。
{
"propId" : 7,
"fields" : {
"fieldname1" : "fieldvalue1",
...
}
}
我能够创建像这样的find()查询:
db.getCollection('col').find({"propId" : {"$in" : [7, 8, 9]}})
,但是对结果进行排序很麻烦。
我一直在查看聚合运算符,但目前无法将我的find()逻辑(选择与ID列表匹配的文档)转换为也使用$ sortByCount聚合的聚合查询。 / p>
一个指向聚合器如何工作以及如何将find-logic转换为聚合查询的指针,将不胜感激。或一个指向如何按“字段”计数对查找查询进行排序的指针。
答案 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}
])