如何使用变量名在mongoose中创建字段?我已经看到了一些使用.update()的方法,但我想知道在创建新文档时是否有办法做到这一点
我的架构如下:
var summariesSchema = mongoose.Schema({
type: String,
name: String,
date: String
})
和我的对象:
var date = '2015-02-01'
var obj = {
ios: 100,
android: 500
}
var doc = {}
doc[date] = obj
var mongoDoc = new Summaries({
name: 'John',
type: 'person',
date: date,
$doc: doc
})
mongoDoc.save(function(err){
if(!err) log('done')
else log(err.toString())
})
但它只保存字段'name','type'和'date'。
任何人都可以告诉我是否有可能做类似的事情,如果有的话,我错过了什么?
答案 0 :(得分:2)
得到了.. 来自@Alex的第一部分是正确的,只需将schema strict属性更改为false,这样我就可以将新字段添加到我的mongo文档中。对于字段名称作为变量,我只是首先创建了我的整个对象,然后创建了一个新的文档实例:
var summariesSchema = mongoose.Schema({
type: String,
name: String,
date: String
}, { strict: false })
var date = '2015-02-01'
var obj = {
name: 'John',
type: 'person',
date: date
}
obj[date] = {
ios: 100,
android: 500
}
var mongoDoc = new Summaries(obj)
mongoDoc.save(function(err){
if(!err) log('Done.')
else log(err)
}
成功!
三年后,ES6语法也允许我们这样做:
var mongoDoc = await new Summaries({
name: 'John',
type: 'person',
date: date,
[date]: { ios: 100, android: 100 }
}).save();
答案 1 :(得分:0)
将架构定义更改为
var summariesSchema = mongoose.Schema({
type: String,
name: String,
date: String
}, { strict: false })