按数组计数对集合进行排序(MongoDB)

时间:2020-05-28 04:01:08

标签: arrays mongodb

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

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或最长字符串对集合进行排序。

有问题的收藏集

Screenshot of collection

截至目前,该集合将按降序排序,第二个记录位于顶部,因为它是所有集合中编号最高的。但是,如上所述,我想要做的是按数组计数排序,因此它应该是最上面的第三条记录,然后是第一条记录,最后是第二条记录。

1 个答案:

答案 0 :(得分:0)

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

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