【问题标题】:Threaded comments and backboneJS线程评论和backboneJS
【发布时间】:2012-11-18 23:10:29
【问题描述】:

目前,我正在使用 nodejs/expressjs 和 mongoDB (+mongoose) 作为数据库。到目前为止它工作正常,但现在我正在尝试 实现嵌套/线程化 cmets。

当我了解到如何将此类 cmets 存储在 mongoDB 我会将每条评论存储在单独的文档中以保留 灵活性。

与存储嵌入在线程中的所有 cmets 相比,我将检索 我的 cmets 从数据库中以无序的形式引用每个父级... 物化路径将是一种替代方法,但是索引可能会出现问题 由于它们的长度。

我打算在渲染时到实际的排序客户端 cmets - 好主意吗?

我阅读了关于主干JS(关系)并问自己是否 这是一个合适的工具,可以帮助实现它。

【问题讨论】:

    标签: node.js backbone.js mongoose express


    【解决方案1】:

    是的,将 cmets 作为单独的文档存储在 Mongo 中就可以了。在 Mongo 中,键控查找通常很快,因此维护线程和注释的单独规范化结构应该可以工作。

    # Create thread:
    db.threads.insert({ id: 123, name: "My thread title..." })
    
    # Add comment:
    db.comments.insert({ id: 1, threadId: 123, text: "My comment text..." })
    
    # Find comments in thread by order of insertion (assuming ids are sequential):
    db.comments.find({ threadId: 123 }).sort({ id: 1 })
    

    如果您正在构建单页应用程序,Backbone 是一个很好的框架。此外,我建议查看Backbone Marionette。这是一个让很多很酷的事情成为可能的扩展(也有很好的文档)。

    【讨论】:

    • 感谢您的回答和有用的提示。尽管您提供了帮助,但我不完全确定将逻辑放在哪里。在 mongo 中排序:非常适合带有 cmets 的单线程的东西,但想象一下有很多不同缩进的 cmets。时间排序会破坏实际的线程排序。在 Jade:不好,因为“长时间”运行,CPU 密集型的东西。客户端:除了简单的渲染 cmets 之外,还需要很多逻辑。我正在寻找一种在保留 cmets 的实际顺序的同时尽可能多地在 Mongo 方面进行操作的方法。
    • 如果我没记错的话,Mongo 按插入顺序存储集合,所以如果您发出find(),那么您应该可以按原样使用它(即排序顺序将是按时间顺序排列的插入顺序)。
    • 如果您想在客户端进行排序,Backbone.Collection 结合Backbone.Marionette.CollectionView 可以基于自定义排序功能轻松实现。
    猜你喜欢
    • 2018-04-14
    • 2013-05-13
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多