按 MongoDB 中的数组大小对记录进行排序

Sorting Records by size of an array in MongoDB

这是我的示例 MongoDB 集合,我需要按学生注册科目数升序排列的所有记录列表。

对应的mysql查询将是

SELECT name, COUNT(subject_code) AS NUM FROM table_name ORDER BY NUM ASC

请帮我找到一个 MongoDb 查询来做同样的事情:

{
    ["name"]=> string(5) "David"   
    ["subject_code"]=> array(5) {
        [0]=> int(101)
        [1]=> int(111)
        [2]=> int(121)
        [3]=> int(123)
        [4]=> int(53)
    }
}

我已经检查了已有的答案。那些并没有真正的帮助。希望这个回答对您有所帮助。

假设您有以下文件

{ "_id" : 1, "name" : "david", subject_code: [ 101, 111, 121 ] }
{ "_id" : 2, "name" : "joe", subject_code: [ 131 ] }
{ "_id" : 3, "name" : "sam", subject_code: [ ] }

此查询将列出列表的长度作为字段 len

db.collname.aggregate([{ $project: { name: 1, len: { $size: "$subject_code" }}}])

输出将是

{ "_id" : 1, "name" : "david", len: 3 }
{ "_id" : 2, "name" : "joe", len: 1 ] }
{ "_id" : 3, "name" : "sam", len: 0 }

现在事情很简单了.. 在输出上使用排序函数(在字段 "len" 上)

db.collname.aggregate( 
[
    {$project: {"name": 1, "nump": { $size: { "$ifNull": ["$subject_code", []] }}}},
    {$sort: {nump: -1}} 
])

这是您的完整查询。如果 subject_code 字段是其他类型或 Null

,它将按字段 num 排序并使用 [] emply list