MongoDB: 在不同的数据模型中获取最新的 10 个项目?

MongoDB: Get latest 10 items in different data model?

我正在尝试用 MongoDB 做一个个人博客系统。该博客系统旨在支持正式文章和短推文,它们具有相似但不同的数据结构。例如,一篇文章必须有标题,但推文不能;他们都有创建日期。

设计中还有一个时间轴功能。时间轴将显示最新的 10 条条目,无论条目是文章还是推文,当按下 "load more" 按钮时,将显示 10-20 条条目...

所以我认为设计数据库模式有两种方法

  1. 将文章和推文保存到单独的 collection 中。
  2. 将所有内容保存到一个 collection 中,添加一个 "type" 字段用于指定。

我有三个问题:

  1. 如果我使用方法1,如何实现"latest 10 items"查询?欢迎使用 MongoDB 查询语言、mongoose、mongoengine 或其他语言的任何字面解释或示例代码。
  2. 如果我使用传统的 SQL 数据库(如 MySQL),是否有解决 "latest 10 items" 问题的通用方法?
  3. 哪些方法更符合 MongoDB 的理念?

谢谢

问题 1:如果您要将 articlestweets 保存到单独的集合中,您要么必须进行应用程序端连接或者使用 $lookup 运算符,如果你有分片集合,这将不起作用。我倾向于避免具有该限制的运算符。

问题 2:我不与 SQL 合作,无法帮助您。

问题 3:将所有内容保存到一个集合中肯定更符合 MongoDB 哲学。 MongoDB 检索速度应该很快,尽管插入和更新速度较慢。进行应用程序端连接或必须使用 $lookup 会导致其将文档嵌入 windows.

之外的能力

至于您的数据模型,这是我的看法。我使用 java 驱动程序并且我曾经有一个自定义的 deserializer/serializer 来处理文档到 POJO 的映射。我相信它在 Mongo Java Driver 3.5 中得到了原生支持,不确定它是否已经用于 Mongoose。在任何情况下,您都可以定义一个包含两个模型中所有字段的 Model/Object,然后它会相应地序列化,无论您使用方法 2 从数据库中获取哪种类型。模型会变得有点乱添加更多字段,因此可能需要一些巧妙的命名