2017-02-23 82 views
0

我第一次使用Mongo,并且在创建具有数组的文档时遇到困难。 该对象被传递到的NodeJS服务器,像这样:Mongoose - 将数组插入到mongo DB

{ 
"customerid":"121212", 
"name": "Zero 2679", 
"email": "[email protected]", 
"address": "bla bla bla", 
"tokens":[{"ctoken":"123456"},{"ctoken":"1234567"}] 
} 

代码执行:

  var newCustomer = new Customer(
      { 
       _id: request.body.customerid, 
       name: request.body.name, 
       email: request.body.email, 
       address: request.body.address, 
       tokens:request.body.tokens 
      }); 
      newCustomer.save(function (err) { 
       if (err) winston.log('error', err); 
       // saved! 
      }) 

架构配置像这样:

var customerSchema = new Schema({ 

// index: true => Tells mongo to index this paramater because it is used frequently. It makes querying faster 
_id: {type: String, unique: true}, // unique customer ID 

name: {type: String, default: '', required: true}, // Customer name 

//email: {type: mongoose.SchemaTypes.Email, required: true}, 
email: {type: String, required: true}, 

address: { type: String, required: true }, 

toknes: [{ ctoken :{type: String} }] 

}, {collection: 'customers'}); 

当我去看看MongoDB中的对象,它看起来像这样:

{ 
"_id": "121212", 
"email": "[email protected]", 
"address": "bla bla bla", 
"tokens": [], 
"name": "Zero 2679", 
"__v": 0 
} 

令牌丢失,并有'_v'值,我甚至没有。

请告知我做错了什么?

+1

_v是来自mongo,不用担心 –

回答

1

tokens: [{ ctoken : String }]

request.body.tokens必须像= {ctoken: 'some string'}

 var newCustomer = new Customer(
     { 
      _id: request.body.customerid, 
      name: request.body.name, 
      email: request.body.email, 
      address: request.body.address, 
      tokens:[request.body.tokens] 
     }); 
     newCustomer.save(function (err) { 
      if (err) winston.log('error', err); 
      // saved! 
     }) 

,如果客户DB文件中包含的数据,然后您应该执行push操作

+0

试过这个,仍然不起作用。请看看我更新的问题。 –

+1

在模式中有'toknes'字段而不是'tokens',做一个'console.log(req.body.tokens)' –

+0

4,一个错字,我简直不敢相信。 –

0

在您的模式应该是:

tokens: [{ type: String }] 

由于ctoken不是数据类型。工作模式如下图所示:

架构中的
var customerSchema = new Schema({ 
_id: {type: String, unique: true}, 
name: {type: String, default: '', required: true}, 
email: {type: String, required: true}, 
address: { type: String, required: true }, 
tokens: [{ type: String }] 
}, {collection: 'customers'}); 
+0

试过这个,还是不行。请看看我更新的问题。 –