在mongodb中排序条件

时间:2015-02-10 17:50:52

标签: mongodb

以下是示例集合:

[
 {'name': 'element1', ratings: {'user1': 1, 'user2':2}},
 {'name': 'element2', ratings: {'user1': 2, 'user2':1}}
]

我想为user1排序:['element2','element1'], 对于user2:['element1','element2']。

换句话说,我想将当前用户的最高评级结果放在顶部。

集合非常大,这就是搜索必须使用索引的原因。可以修改集合结构,这只是示例。

1 个答案:

答案 0 :(得分:0)

这些是不同领域的种类。第一个是{ "ratings.user1" : -1 }上的排序,第二个是{ "ratings.user2" : -1 }上的排序;您将需要每个字段的索引来支持每种类型。除了少数用户之外,您无法扩展这样的设置。我不知道这些文档的整个用例是什么,但如果核心要求是根据用户的评级为用户排序元素,我会重新构建集合,以便单个文档代表特定用户对特定元素的评级:

{
    "_id" : ObjectId(...),
    "element" : "element1",
    "user" : "user1",
    "rating" : 1
},
{
    "_id" : ObjectId(...),
    "element" : "element1",
    "user" : "user2",
    "rating" : 2
}

如果您在{ "user" : 1, "rating" : -1 }上创建索引,则可以按特定用户对按元素评分排序的元素评分执行索引查询:

db.ratings.find({ "user" : "user1" }).sort({ "rating" : -1 })