MongoDB按子文档计数排序

时间:2011-09-30 17:15:45

标签: sorting mongodb

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

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

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

  

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

抛出错误:

  

SyntaxError:missing:属性id(shell)之后:0

2 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:8)

mongodb [1]

无法直接实现

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

您的文档将如下所示:

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

并使用

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