【问题标题】:MongoDB: Get latest 10 items in different data model?MongoDB:获取不同数据模型的最新 10 项?
【发布时间】:2017-08-22 01:32:51
【问题描述】:
我正在尝试用 MongoDB 做一个个人博客系统。博客系统旨在支持正式文章和短推文,它们具有相似但不同的数据结构。例如,文章必须有标题,但推文不能;它们都有一个创建日期。
设计中还有时间线功能。时间线会显示最新的 10 条,无论是文章还是推文,当按下“加载更多”按钮时,会显示 10-20 条...
所以我认为设计数据库架构有两种方法
- 将文章和推文保存到单独的集合中。
- 将所有内容保存到一个集合中,添加“类型”字段进行指定。
我有三个问题:
- 如果我使用方法1,如何实现“最新10项”查询?欢迎使用任何文字解释或 MongoDB 查询语言、mongoose、mongoengine 或其他语言中的示例代码。
- 如果我使用传统的 SQL DB(如 MySQL),有没有解决“最新 10 项”问题的通用方法?
- 哪种方法更符合 MongoDB 的理念?
谢谢
【问题讨论】:
标签:
sql
mongodb
mongoose
mongoengine
【解决方案1】:
问题 1:如果您将 articles 和 tweets 保存到单独的集合中,您要么必须进行应用程序端加入,要么使用 $lookup 运算符,这如果您有分片集合,则将无法使用。我倾向于避免有这种限制的运算符。
问题 2:我不使用 SQL,无法帮助您。
问题 3:将所有内容保存到一个集合中肯定更符合 MongoDB 的理念。 MongoDB 的检索速度应该很快,但插入和更新速度较慢。进行应用程序端加入或不得不使用$lookup 会使其能够将文档嵌入到窗口之外。
至于您的数据模型,这是我的看法。我使用了 java 驱动程序,并且我曾经有一个自定义的反序列化器/序列化器来处理文档到 POJO 的映射。我相信 Mongo Java Driver 3.5 原生支持它,不确定 Mongoose 是否已经支持它。在任何情况下,您都可以定义一个包含两个模型中所有字段的模型/对象,然后它会相应地序列化,无论您使用方法 2 从数据库中获取哪种类型。当您添加更多时,模型会变得有点混乱字段,所以可能需要一些巧妙的命名