我正在使用mongodb和node.js移动我的第一步,我对猫鼬和存储接收的数据有一些疑问。
我正在尝试使用端点创建一个REST API,用于以json格式提交(POST)“stuff”。 我会将这些“东西”存储在mongodb中,但我没有精确的架构:提交的数据都是相似且相关的,但有些可能因某些字段而有所不同。
例如,我可以收到:
object_1
{
field1: value1
field2: value2
}
object_2
{
field1: value1
field3: value3
}
它们在某种程度上是相似的,它们都代表相同的对象类型,它们只缺少一些字段(如null或其他)。
阅读一些文档和教程,我看到mongoose需要一个“模式”,比如
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和其他一些。我可以在我的架构中声明它们,但其他的呢?
我希望它很清楚!
谢谢!
答案 0 :(得分:0)
您可以使用所有可能的键创建架构,但不要求所有键都被填充。这样,您可以为两个对象重用模式,其中一些键将具有值,而其他键将是未定义的。
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'
}