如何使用变量名创建字段?

时间:2015-02-12 15:37:20

标签: javascript node.js mongodb mongoose

如何使用变量名在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'。

任何人都可以告诉我是否有可能做类似的事情,如果有的话,我错过了什么?

2 个答案:

答案 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 })