【问题标题】:Sort Collection by Array Count (MongoDB)按数组计数排序集合 (MongoDB)
【发布时间】:2020-09-15 07:17:41
【问题描述】:

所以我想按数组计数降序对集合进行排序。在我当前的代码中,我有“UpVote:-1”,它通常可以工作,但是对于一个数组,它似乎是按数组内的字符的最高数或最长长度对集合进行排序,我想要的是它按数组本身计数。

CRUD 服务类

public async Task<IEnumerable<T>> GetPopular<T>(string collectionName)
    {
        var collection = db.GetCollection<T>(collectionName);
        return await collection.Find(new BsonDocument()).Sort("{UpVote: -1}").ToListAsync();
    }

这不会像我想象的那样按数组计数对集合进行排序,而是按 UpVote 数组中的最高 int 或最长字符串对集合进行排序。

有问题的集合

到目前为止,集合将按降序排序,第二条记录在顶部,因为它在所有记录中的数量最多。然而,如上所述,我正在尝试做的是按数组计数排序,因此它应该是顶部的第三条记录,然后是第一条记录,最后是第二条记录。

【问题讨论】:

    标签: arrays mongodb


    【解决方案1】:

    您可以使用聚合管道阶段 $project$sort 阶段。 Example,Mongo shell查询如下

    db.collection.aggregate([
      {
        $project: {
          upvote_count: {
            $size: {
              "$ifNull": [
                "$upvote",
                []
              ]
            }
          },
          key: 1,
          upvote: 1
        }
      },
      {
        $sort: {
          "upvote_count": -1
        }
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2013-01-12
      • 2022-12-16
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多