【问题标题】:Storing objects of variable structure in MongoDB在MongoDB中存储可变结构的对象
【发布时间】:2018-06-15 01:19:57
【问题描述】:

我正在使用 mongodb 和 node.js 迈出第一步,我对 mongoose 和存储接收到的数据有一些疑问。

我正在尝试制作一个带有端点的 REST API,用于以 json 格式提交(POST)“东西”。 我会将这些“东西”存储在 mongodb 中,但我没有精确的架构:提交的数据都是相似且相关的,但其中一些可能因某些字段而异。

例如,我可以收到:

object_1

{
  field1: value1
  field2: value2
}

object_2

{
  field1: value1
  field3: value3
}

它们在某种程度上相似,它们都代表相同的对象类型,它们只是缺少一些字段(如 null 或其他)。

阅读了一些文档和教程,我看到猫鼬需要一个“模式”,比如

var mySchema = mongoose.Schema({
   foo: String
   bar: String
});

如果我没有固定架构怎么办?我可以在不使用架构的情况下将“object_1”和“object_2”存储在同一个集合中(因为它们是相关的)吗?

谢谢!

编辑:

需要明确的是,提交的json来自调查,例如:

{
  // standard/default fields
  id: 2,
  date: 'timestamp',
  surveyId: 13,
  ...
  // here starts non-standard fields list
}

每个调查都有许多字段,但并非每个字段都是强制性的,有时字段可能留空(或为空),并且根本不包含在 json 正文中。在一个提交中我可能有 {field1, field2, field3},在下一个 {field1, field3, field4, field5} 等等......

其中一些是标准的,如 id、datetime 和其他一些。我可以在我的架构中声明它们,但是其他的呢?

我希望它很清楚!

谢谢!

【问题讨论】:

  • 通常不建议在对象中使用动态键,因为之后您将无法轻松检索它们。您能否举一个更具体的例子说明您为什么要这样做?
  • 当然,它们基本上是来自某个调查的数据,每个提交可能有一些字段,另一个可能有其他字段。每个都有一些标准字段(如 id、survey_id、datetime 和其他一些)。我正在编辑第一篇文章

标签: javascript node.js mongodb mongoose


【解决方案1】:

您可以创建一个包含所有可能键的模式,但不需要填写所有键。这样您就可以为这两个对象重用架构,其中一些键将具有值,而另一些则未定义。

var survey = mongoose.Schema({
  id: Number,
  date: String,
  surveyId: Number,
  customfield1: String,
  customfield2: String
});

当你发布 object_1 时,你会得到类似的东西

{
  id: 1,
  date: 'timestamp',
  surveyId: 1,
  customfield1: 'value'
}

而使用 object_2 你会得到

{
  id: 2,
  date: 'timestamp',
  surveyId: 2,
  customfield*2*: 'value'
}

【讨论】:

  • 谢谢!这可能是一种选择。问题是:有很多可能的键,它们可能会随着时间的推移而改变。我应该在每次编辑后更新或创建新架构...
猜你喜欢
  • 2015-04-03
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2016-07-08
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多