如何在Mongodb中存储动态字段

时间:2014-04-23 22:37:38

标签: mongodb nosql

我是MongoDB的新手,但我正在考虑解决这个问题:

我的应用程序有一个动态表单构建器,允许用户在表单上添加动态字段。表单上的字段都没有修复或静态。

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

我相信由于它的动态存储和字段不是静态的,因此Oracle DB无法用于存储。 可以使用Mongo DB进行此类存储并获取数据吗?

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

提前致谢!

2 个答案:

答案 0 :(得分:2)

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

例如

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

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

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

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

 person.email = 'new value';

获取它们时,您可以迭代对象上的键并再次将值显示到前端

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

答案 1 :(得分: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"
           ]
         }
     ]
}

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