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

时间:2017-08-22 01:32:52

标签: sql mongodb mongoose mongoengine

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

设计中还有一个时间轴功能。时间线将显示最新的10个项目,无论该项目是文章还是推文,以及何时加载更多"按下按钮,会显示10-20项...

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

  1. 将文章和推文保存到单独的馆藏中。
  2. 将所有内容保存到一个集合中,添加"类型"用于指定的字段。
  3. 我有三个问题:

    1. 如果我使用方法1,如何实施"最新的10项"查询?任何文字解释,或MongoDB查询语言中的示例代码,mongoose,mongoengine或其他,都是受欢迎的。
    2. 如果我使用传统的SQL DB(如MySQL),有没有一种常用的方法来解决最新的10个项目"问题?
    3. 哪种方法更符合MongoDB的理念?
    4. 由于

1 个答案:

答案 0 :(得分:0)

问题1:如果要将文章推文保存到单独的集合中,则必须进行应用程序端加入或使用$lookup运算符,如果你有分片集合,这将无法工作。我倾向于避免那些有这种限制的运营商。

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

问题3:将所有内容保存到单个集合中绝对符合MongoDB的理念。 MongoDB应该快速检索,但插入和更新速度较慢。无论是应用程序端连接还是必须使用$lookup类型,都可以将文档嵌入到窗口之外。

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