MongoDB按子文档计数排序

ben*_*ier 9 sorting mongodb

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

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

是否可以按"评级"计数排序?做类似的事情:

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

抛出错误:

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

dro*_*gon 17

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

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


kam*_*ber 8

用mongodb直接做到这一点[ 1 ]

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

您的文档将如下所示:

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

并查询

db.comments.find().sort({count: -1})
Run Code Online (Sandbox Code Playgroud)