【问题标题】:Render mongodb documents with varying schema使用不同的模式渲染 mongodb 文档
【发布时间】:2017-12-12 12:05:04
【问题描述】:

有没有人遇到过一种优雅的方式/库来呈现具有不同架构的 Mongodb 文档? 我基本上使用 NodeJS+Express+EJS 并想显示一些文档。文档架构不是固定的,因此像 Datatables 这样的解决方案本来是理想的,但需要固定列。我想看看是否有人遇到过一种创新的方式来处理这个问题,这种方式对最终用户来说也具有视觉吸引力和用户友好性。 每个文档都有一个 _id 和 _created。因此,也许我会呈现这些列表,一旦单击它就会打开并显示所有其他字段,这些字段可能是不同的文档。 谢谢 托尼

【问题讨论】:

    标签: node.js mongodb express mongoose ejs


    【解决方案1】:

    据我所知,你最后提到的是公约。这不是你可以做但你应该做的事情。在列表中显示记录的最少和最重要的信息。用户单击一个以在新页面、对话框或扩展屏幕中获取更多详细信息。这是我们在大多数网络和移动应用程序中看到的。

    页面和 Restful API 的 URL 也遵循此约定 resource/resource/idapi/resourceapi/resource/id

    如果字段不是很多,并且您绝对需要列表中每条记录的完整信息,那么您可以按照以下方案进行操作。它考虑了可变字段:

    //example mongodb documents
    var docs = [{
            _id: "59608c980b526c5e0d72f30f",
            firstName: "Steve",
            lastName: "Smith",
            fullName: "Steve A Smith"
    
        },
        {
            _id: "59608c980b526c5e0d72f300",
            firstName: "John",
            lastName: "Steward",
            address: "Park Lane",
            email: "j_stwd@gmail.com"
    
        }];
    

    正在查看(以? 作为分隔符的ejs)

        <div class="row">
            <? docs.forEach(function(doc, index) { ?>
              <? for(var key in doc){ ?>
                  <?= key !== '_id'? (key + ": " + doc[key]) : "" ?> <br>
              <? } ?>
            <? }) ?>
        </div>
    

    您显然希望将每条记录放在某个卡片或容器中并美化它。此外,可能会拆分键名或将它们映射为更人性化的格式,例如 First Name 而不是 firstName

    【讨论】:

    • 感谢 Talha,希望有一个不错的库可以完成所有繁重的工作,因为数据可以通过 API 端点轻松获得
    • 问题还是一样:你真的应该在列表中显示文档的所有字段(表格、卡片等等)吗?您可以通过缺少任何有信誉的库来猜测这不是一种理想的行为。但是,如果除了_id 之外,您甚至没有几个字段可以保证存在于所有文档中,那么您就有了意义。但是在任何动态渲染中,您要么必须单独提及每个文档的字段名称(如我上面所示),要么将所有文档中的所有字段合并并将它们转换为表格行并在下面显示相应的值。
    • @TonyAldo 我能找到的唯一与您需要的类似的库是mongo-table-admin。它似乎仅供管理员测试,因此没有实际用途。
    • 数据代表一个访问者表单。虽然表单字段不经常更改,但管理员可能会决定向表单添加字段。所以文档架构不是很严格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多