首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据属性child-count对mongo find()结果进行排序

根据属性child-count对mongo find()结果进行排序
EN

Stack Overflow用户
提问于 2018-11-29 17:45:56
回答 1查看 74关注 0票数 0

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

My documents的设置如下所示,每个文档可以包含零个或多个字段属性。

我希望对返回的集合进行排序,这样字段最多的文档就会排在第一位。

代码语言:javascript
运行
复制
{
  "propId" : 7,
  "fields" : {
    "fieldname1" : "fieldvalue1",
    ...
  }
}

我可以像这样创建find()查询:

代码语言:javascript
运行
复制
db.getCollection('col').find({"propId" : {"$in" : [7, 8, 9]}})

,但无法对结果进行排序。

我一直在研究聚合运算符,但目前还不能将我的find()逻辑(选择与I列表匹配的文档)转换为也使用$sortByCount聚合的聚合查询。

如果能指向聚合器的工作方式,以及如何将查找逻辑转换为聚合查询,将不胜感激。或者指向如何通过“字段”计数对find-query进行排序的指针。

EN

回答 1

Stack Overflow用户

发布于 2018-11-30 12:29:17

试试这个:

代码语言:javascript
运行
复制
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}

])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53536041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档