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

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

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

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

【讨论】:

以上是关于MongoDB:获取不同数据模型的最新 10 项?的主要内容,如果未能解决你的问题,请参考以下文章

2020最新MongoDB规范你应该了解一下

获取 MongoDB 的最新年份

使用 MongoDb 聚合管道根据特定类型查询前 10 项

Mongodb,按日期差异分组并获取小时

用于小型数据集的 MongoDB

根据列 sql powershell 获取最新的重复项