按用户特定字段

时间:2017-05-23 16:34:40

标签: mongodb

想象一下带有项集合的应用程序:

  • 用户可以在项目列表上共享/协作(如todo应用程序或其他内容)
  • 项目集合很长,应该分页,并按不同的标准排序

目前,根据项目创建日期,项目作者姓名等标准进行排序非常容易。

但是现在,每个用户都应该能够为每个项目设置特定于用户的优先级,并且能够按优先级对该列表进行排序。一个项目可以由用户具有一个优先级,而不是全局。默认情况下,没有设置优先级的项目应该显示在最后

我想知道如何根据这样的要求有效地进行分页/排序。

如果我有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();

有什么想法吗?

请注意,只要您的提案解决了我的业务需求,向用户显示按用户特定优先级排序的分段项目列表,就可以更改模型化。

我有:由不同用户协作创建的项目列表

  • 项目1
  • 项目2
  • 项目3
  • 项目4
  • 项目5

项目UI视图是分页的,默认情况下,项目按创建日期降序排序:

  • 项目5
  • 项目4
  • 项目3
  • 项目2
  • 项目1

新的应用互动:用户设置项目的优先级

每个项目的优先级不是全局的。 2个不同的用户可以为完全相同的项目设置不同的优先级。

假设User1设置:

  • 第3项优先级为
  • 第5项优先顺序
  • 其他项目没有为User1
  • 设置优先级

假设User2设置:

  • 第3项优先顺序
  • 第1项优先顺序
  • 其他项目没有为User2设置优先级

预期结果:UI视图应显示按优先级排序的项目(分页)

更确切地说,我想先按优先级排序项目(null / undefined user-priority last),然后按创建日期降序排序。每个用户都会得到不同的订单。

User1应该:

  • Item5(p = 2)
  • 第3项(第1页)
  • Item4(p = undefined)
  • 第2项(p =未定义)
  • 第1项(p =未定义)

User2应该:

  • 第1项(第3页)
  • 第3项(第2页)
  • Item5(p = undefined)
  • Item4(p = undefined)
  • 第2项(p =未定义)

0 个答案:

没有答案