【问题标题】:MongoDB sort by subdocument countMongoDB按子文档计数排序
【发布时间】:2013-02-15 07:52:06
【问题描述】:

我有一个看起来像这样的文档:

{
        "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"),
        "parent_id" : 0,
        "ratings" : [
                "20716",
                "78167"
        ],
        "text" : "test"
}

是否可以按“评分”计数排序?做类似的事情:

db.cmets.find().sort({rating.count(): -1})

抛出错误:

SyntaxError: missing : after property id (shell):0

【问题讨论】:

    标签: sorting mongodb


    【解决方案1】:

    已经有一个标记的答案,但我想我要补充一点,这可以使用聚合框架来完成:

    db.comments.aggregate( [
       { $unwind: "$ratings" },
       { $group : { _id : { parent_id: "$parent_id", text: "$text"  }, 
                    ratingsCount : { $sum : 1 } } },
       { $sort : { ratingsCount : -1 } }
    ] )
    

    【讨论】:

    • 有问题,即使count为0,也显示为1
    【解决方案2】:

    mongodb 无法直接实现这一点 [1]

    如果您经常使用此查询,一个解决方案是每次修改评级数组并在该字段上排序时递增和递减字段“计数”。

    您的文档将如下所示:

    {
        "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"),
        "parent_id" : 0,
        "ratings" : [
                "20716",
                "78167"
        ],
        count : 2
        "text" : "test"
    }
    

    然后你用

    查询
    db.comments.find().sort({count: -1})
    

    【讨论】:

    • 是的,这是目前唯一的选择,这是 10gen 在他们的设计幻灯片中的状态
    • 新的聚合框架仍然是唯一的选择吗?
    猜你喜欢
    • 2012-12-11
    • 2014-06-23
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2017-05-10
    • 2016-04-10
    • 2015-11-17
    • 2014-08-14
    相关资源
    最近更新 更多