【问题标题】:Sorting Records by size of an array in MongoDB在 MongoDB 中按数组大小对记录进行排序
【发布时间】:2016-07-18 07:18:13
【问题描述】:

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

【问题讨论】:

  • "此问题未显示任何研究成果,..." 请花 10 分钟阅读有关 aggregation 的信息,您将能够自己回答问题:数组的项目大小,然后对结果进行排序。

标签: mysql mongodb mongodb-query php-mongodb


【解决方案1】:

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

假设你有以下文件

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多