【问题标题】:Sort a mongo find() result by property child-count按属性 child-count 对 mongo find() 结果进行排序
【发布时间】:2018-11-29 09:45:56
【问题描述】:

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

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

我希望对返回的集合进行排序,以便具有最多字段的文档排在第一位。

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

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

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

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

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

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

【问题讨论】:

    标签: mongodb-query


    【解决方案1】:

    试试这个:

    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}
    

    ])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多