首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MongoDb中建立一个依赖于两个数组的高效查询?

如何在MongoDb中建立一个依赖于两个数组的高效查询?
EN

Stack Overflow用户
提问于 2013-10-26 14:31:43
回答 1查看 67关注 0票数 0

mongodb不允许在两个字段上创建索引的主要问题是每个字段都持有一个数组:

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

正因为如此,我正经历着艰难的时刻,试图解决下一个问题。

集合描述

集合名称:项目

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

电流采集结构(简化)

代码语言:javascript
复制
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“字段排序)。

问题是

如何解决这个问题?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-10-26 19:35:23

是的,您必须在mongodb中重组您的集合。因为你是包括新的实体“新闻项目”,你的最后输出是新闻项目,是未读的。我建议你跟着走。在此之前,我已经将您的数据可视化如下

代码语言:javascript
复制
usercollection
- user (email id, last logged in time)

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

每当新闻项目发生变化,如创建,更新,然后更改创建时间戳,更新时间戳。

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

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

备注*:由于用户和新闻之间存在着多到多的关系,试图提供高用户特定的新闻更新需要更多的文档更新,或者您必须对每个与新闻/用户相关的更改在数组中操作更多的元素。如果你想这么做,想想你的应用程序的性能。

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19607883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档