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

时间:2016-03-30 10:33:16

标签: mysql mongodb mongodb-query php-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)
    }
}

1 个答案:

答案 0 :(得分:2)

我已检查过已有的答案。那些并不是真的有用。希望这个答案会有所帮助。

假设您有以下文件

{ "_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 }

现在事情很简单..在输出上使用sort函数(在字段“len”上)

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

这是您的完整查询。它将按字段nump排序并使用[] emply list,如果subject_code字段是某种其他类型或Null