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