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

How to create field using variable name?

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

任何人都可以告诉我是否可以做这样的事情,如果可以,我错过了什么?

将您的架构定义更改为

var summariesSchema = mongoose.Schema({
  type: String,
  name: String,
  date: String
}, { strict: false })

知道了.. @Alex 的第一部分是正确的,只需将模式严格 属性 更改为 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();