以下是示例集合:
[
{'name': 'element1', ratings: {'user1': 1, 'user2':2}},
{'name': 'element2', ratings: {'user1': 2, 'user2':1}}
]
我想为user1排序:['element2','element1'], 对于user2:['element1','element2']。
换句话说,我想将当前用户的最高评级结果放在顶部。
集合非常大,这就是搜索必须使用索引的原因。可以修改集合结构,这只是示例。
答案 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 })