这是我的示例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)
}
}
答案 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