【问题标题】:MongoDB: Get latest 10 items in different data model?MongoDB:获取不同数据模型的最新 10 项?
【发布时间】:2017-08-22 01:32:51
【问题描述】:

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

设计中还有时间线功能。时间线会显示最新的 10 条,无论是文章还是推文,当按下“加载更多”按钮时,会显示 10-20 条...

所以我认为设计数据库架构有两种方法

  1. 将文章和推文保存到单独的集合中。
  2. 将所有内容保存到一个集合中,添加“类型”字段进行指定。

我有三个问题:

  1. 如果我使用方法1,如何实现“最新10项”查询?欢迎使用任何文字解释或 MongoDB 查询语言、mongoose、mongoengine 或其他语言中的示例代码。
  2. 如果我使用传统的 SQL DB(如 MySQL),有没有解决“最新 10 项”问题的通用方法?
  3. 哪种方法更符合 MongoDB 的理念?

谢谢

【问题讨论】:

    标签: sql mongodb mongoose mongoengine


    【解决方案1】:

    问题 1:如果您将 articlestweets 保存到单独的集合中,您要么必须进行应用程序端加入,要么使用 $lookup 运算符,这如果您有分片集合,则将无法使用。我倾向于避免有这种限制的运算符。

    问题 2:我不使用 SQL,无法帮助您。

    问题 3:将所有内容保存到一个集合中肯定更符合 MongoDB 的理念。 MongoDB 的检索速度应该很快,但插入和更新速度较慢。进行应用程序端加入或不得不使用$lookup 会使其能够将文档嵌入到窗口之外。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多