想象一下带有项集合的应用程序:
目前,根据项目创建日期,项目作者姓名等标准进行排序非常容易。
但是现在,每个用户都应该能够为每个项目设置特定于用户的优先级,并且能够按优先级对该列表进行排序。一个项目可以由用户具有一个优先级,而不是全局。默认情况下,没有设置优先级的项目应该显示在最后
我想知道如何根据这样的要求有效地进行分页/排序。
如果我有N个用户,那么在项目集合上拥有N个索引似乎不是一个好主意,也不是每次新用户注册时动态创建新索引。
这是一个mongoshell脚本,包含一些假数据和我想要的查询类型
db.test.insert({ item: "stample2", "userId1": {priority: 2}});
db.test.insert({ item: "stample0", "userId1": {priority: 0}});
db.test.insert({ item: "stampleUndefined", "userId1": {}});
db.test.insert({ item: "stample3", "userId1": {priority: 3}});
db.test.insert({ item: "stample1", "userId1": {priority: 1}});
db.test.find().sort({ "userId1.priority": -1 }).pretty();
有什么想法吗?
请注意,只要您的提案解决了我的业务需求,向用户显示按用户特定优先级排序的分段项目列表,就可以更改模型化。
项目UI视图是分页的,默认情况下,项目按创建日期降序排序:
每个项目的优先级不是全局的。 2个不同的用户可以为完全相同的项目设置不同的优先级。
假设User1设置:
假设User2设置:
更确切地说,我想先按优先级排序项目(null / undefined user-priority last),然后按创建日期降序排序。每个用户都会得到不同的订单。
User1应该:
User2应该: