如何按数组中匹配条件的元素对MongoDB结果进行排序?

如何按数组中匹配条件的元素对MongoDB结果进行排序?,mongodb,mongodb-query,mongodb-aggregation,Mongodb,Mongodb Query,Mongodb Aggregation,我收集了一些地方,如下所示: { "_id" : ObjectId("575014da6b028f07bef51d10"), "name" : "MooD", . . . "categories" : [ { "categoryList" : [Nightlife, Bar], "weight" : 8 }, { "categoryList" : [Restaurant, Italian Restaurant],

我收集了一些地方,如下所示:

{
"_id" : ObjectId("575014da6b028f07bef51d10"),
"name" : "MooD",
.
.
.
"categories" : [
    {
        "categoryList" : [Nightlife, Bar],
        "weight" : 8
    },
    {
        "categoryList" : [Restaurant, Italian Restaurant],
        "weight" : 4
    }
]
}
我想按类别搜索位置,例如“酒吧”。 所以,如果有“Bar”,我会查看类别的分类列表。 然后,我想根据匹配类别的权重进行排序,
因此,上述位置(钢筋重量为8)出现在另一个钢筋重量为5的位置之前

您必须使用聚合框架。 选中此项:

db.mongo.aggregate(
    { $unwind: '$scores' },
    { $match: {
        'scores.categoryList': 'Bar'
    }},
    { $sort: {
        'scores.weight': -1
    }}
)

您必须使用聚合框架。 选中此项:

db.mongo.aggregate(
    { $unwind: '$scores' },
    { $match: {
        'scores.categoryList': 'Bar'
    }},
    { $sort: {
        'scores.weight': -1
    }}
)

在您的情况下,聚合是否有效?在您的情况下,聚合是否有效?这很有效。非常感谢您的回复。在你上面的问题中,我相信分数是用来分类的。现在的问题是,我无法在回复中获得其余类别。在我的问题的例子中,我还想得到那个地方的餐馆类别。你有什么想法吗?先谢谢你。我不确定我是否理解你的意思。。。。尝试以下代码:db.mongo.aggregate({$project:{“scores.categoryList”:1,“scores.weight”:1,“\u id”:0}},{$unwind:'$scores'},{$unwind:'$scores.categoryList'},{$sort:{'scores.weight':-1})我建议您访问MongoDB大学页面()并学习其中一门课程。他们是免费的,而且很有帮助。这很有效。非常感谢您的回复。在你上面的问题中,我相信分数是用来分类的。现在的问题是,我无法在回复中获得其余类别。在我的问题的例子中,我还想得到那个地方的餐馆类别。你有什么想法吗?先谢谢你。我不确定我是否理解你的意思。。。。尝试以下代码:db.mongo.aggregate({$project:{“scores.categoryList”:1,“scores.weight”:1,“\u id”:0}},{$unwind:'$scores'},{$unwind:'$scores.categoryList'},{$sort:{'scores.weight':-1})我建议您访问MongoDB大学页面()并学习其中一门课程。他们是免费的,非常有帮助。