如何根据MongoDb中的两个数组进行有效的查询?

时间:2013-10-26 14:31:43

标签: mongodb

当mongodb中的每个字段都包含数组时,mongodb不允许在两个字段上创建索引的主要问题:

{a:[1,2], b: [8,9]}

正因为如此,我在解决下一个问题时遇到了困难。

收藏说明

收藏品名称:商品

  • 每个项目可以属于许多(数千个)文件夹
  • 许多(数千)用户可以阅读每个项目。

目前的收集结构(简化)

folderDataArr: [{
    _id: 1,
    dateOfAddingIntoFolder: 01.01.11
}, {
    _id: 2,
    dateOfAddingIntoFolder: 01.01.12
}],
userDataArr: [{
    _id: 100,
    isRead: true,
    dateOfRead: 01.0.10

}, {
    _id: 101,
    isRead: true,
    dateOfRead: 01.02.31


}]

查询构建

我需要重新格式化我的结构以进行有效的查询:

  • 返回属于某些文件夹但未被特定用户读取的最后N个项目。并且当新闻被添加到文件夹时(换句话说,通过“dateOfAddingIntoFolder”字段),结果应按日期排序。

问题是

如何解决此问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是的,你必须在你的mongodb中重组你的收藏。由于您包含新实体“新闻项目”,而您的最终输出是未读的新闻项目。我建议按照方式。在此之前,我已经将您的数据可视化如下

usercollection
- user (email id, last logged in time)

NewsCollection
- newsitem (newsid,newsdata,createdtimestamp,updatedtimestamp)

每当更新新闻项目如创建,更新然后更改createdtimestamp,updatedtimestamp 分别

如果用户已登录,请选择旧的登录时间戳(在更新当前之前),并选择在createdtimestamp或updatedtimestamp中具有大于旧登录时间戳的所有新闻项。

注意:由于新闻条目和用户是独立的实体,因此不建议将它们保存在单个集合中。

注意*** :由于用户和新闻之间存在多对多的关系,因此尝试提供高用户特定的新闻更新需要更多的文档更新,或者您必须操作更多元素每个新闻/用户相关更改的数组。如果您尝试这样做,请考虑您的应用效果。

希望这会对你有帮助。

相关问题