【问题标题】:How to store dynamic fields in Mongo DB如何在MongoDB中存储动态字段
【发布时间】:2014-06-09 00:09:54
【问题描述】:

我是 MongoDB 新手,但我正在研究它来解决这个问题:

我的应用程序有一个动态表单构建器,允许用户在表单上添加动态字段。表单上的所有字段都不是固定的或静态的。

用户可以在表单上添加任意数量和任意类型的字段,如文本字段、下拉菜单或日期字段并保存表单。

我相信,由于它是动态存储并且字段不是静态的,Oracle DB 不会用于存储。 Mongo DB可以用于这样的存储和获取数据吗?

数据如何存储在 Mongo DB 中并被提取以显示表单。

提前致谢!

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    是的,MongoDB 可以做到这一点。表示这种形式的文档可能如下所示:

    {
         tile: "A simple customer survey",
         creator: "Philipp",
         created: ISODate("2014-04-24T16:59:42.389Z"),
         questions: [
             { 
               question: "How old are you?",
               input: "number"
             },
             { 
               question: "Do you like our products?",
               answers: [
                   "Yes",
                   "No",
                   "Maybe"
               ]
             },
             { 
               question: "Which aspects of our products do you like?",
               multiple: true,
               answers: [
                   "color",
                   "shape",
                   "material",
                   "price",
                   "does not explode often"
               ]
             }
         ]
    }
    

    请注意,“问题”数组中的条目都有不同的字段组合。对 MongoDB 来说,处理这一点完全没有问题,因为它不会为集合中的文档强制使用一致的模式。

    【讨论】:

      【解决方案2】:

      MongoDb 是基于文档的数据库,正如您所说,它没有列或字段限制。您可以将动态字段放入对象并将其保存到同一个集合中。

      例如

       Person: {
         name: '',
         Contacts: [ contact 1, contact 2]
      }
      

      您也可以添加更多字段,例如您可以向其中添加电子邮件

       Person: 
       { name: '', contacts: [], email: ''}
      

      您现在也可以将其保存在 Person Collection 中。只需使用 javascript 对象并添加新的 key 和 value 并保存即可。

       person.email = 'new value';
      

      在获取这些时,您可以遍历对象上的键并将值再次显示到前端

      for (var key in person) {
        // do something with key
      }
      

      【讨论】:

        猜你喜欢
        • 2018-03-10
        • 2011-01-31
        • 1970-01-01
        • 2013-08-24
        • 2014-03-09
        • 2014-05-13
        • 2021-01-03
        • 2022-08-21
        • 1970-01-01
        相关资源
        最近更新 更多