我需要获取与“propIds”列表匹配的所有文档,并希望根据它们有多少子属性对结果进行排序。
My documents的设置如下所示,每个文档可以包含零个或多个字段属性。
我希望对返回的集合进行排序,这样字段最多的文档就会排在第一位。
{
"propId" : 7,
"fields" : {
"fieldname1" : "fieldvalue1",
...
}
}
我可以像这样创建find()查询:
db.getCollection('col').find({"propId" : {"$in" : [7, 8, 9]}})
,但无法对结果进行排序。
我一直在研究聚合运算符,但目前还不能将我的find()逻辑(选择与I列表匹配的文档)转换为也使用$sortByCount聚合的聚合查询。
如果能指向聚合器的工作方式,以及如何将查找逻辑转换为聚合查询,将不胜感激。或者指向如何通过“字段”计数对find-query进行排序的指针。
发布于 2018-11-30 12:29:17
试试这个:
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}
])
https://stackoverflow.com/questions/53536041
复制相似问题