按 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
这是我的示例 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