因此,我想按数组计数按降序对集合进行排序。在我当前的代码中,我有“ 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或最长字符串对集合进行排序。
有问题的收藏集
截至目前,该集合将按降序排序,第二个记录位于顶部,因为它是所有集合中编号最高的。但是,如上所述,我想要做的是按数组计数排序,因此它应该是最上面的第三条记录,然后是第一条记录,最后是第二条记录。
答案 0 :(得分:0)
您可以使用聚合管道阶段$project
和$sort
阶段。 Example,Mongo Shell查询如下
db.collection.aggregate([
{
$project: {
upvote_count: {
$size: {
"$ifNull": [
"$upvote",
[]
]
}
},
key: 1,
upvote: 1
}
},
{
$sort: {
"upvote_count": -1
}
}
])