2017-04-18 43 views
0

我现在有一个模式,看起来如下:插件组到MongoDB的子文档与Node.js的

positionsApplied:[{ 
     position_id:String, 
     index_position: Number 
}], 

我也有3个对象,我需要插入到我的数据库:

enter image description here

如何通过Ajax调用将这些插入到我的数据库中?什么我用尽为止:

的数据添加到一个这样的数组:

["58d6b7e11e793c9a506ffe8f", 0, "58c2871414cd3d209abf4fc1", 1, "58d6b7e11e793c9a506ffe7f", 1] 

这将然后通过我的AJAX调用像这样被传递(不确定)

$.ajax({ 
      url: "/insertPositionIndex", 
      type: "POST", 
      dataType: "json", 
      data: { 
       newarray 
      }, 
      success: function (data) { 
      console.log(data); 
      } 
     }) 

插入到数据库是我卡住的地方,我如何分解数组以插入它?

app.post('/insertPositionIndex', function(req, res){ 
var object = req.body.ordered_divs; 
console.log(req.body); 

     User.update(
     { "_id": req.user._id}, 
     { "$push": 
      {"positionsApplied": 
       { 
       // unsure what to do here? 

       } 
      } 
     } 
    ).exec(function (err, result) { 
      console.log(result); 
      res.send({ results: result }); 
     }); 
     }); 

任何帮助,非常感谢! *注意架构中的position_id字段是数组中的div_id,索引位置字段也是数组中的index_pos。

用户模式:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var User = new Schema({ 
    id: String, 
    name: String, 
    companyname: String, 
    password: String, 
    email: String, 
    username: String, 
    location: String, 
    role:String, 
    teamwork:Number, 
    initiative:Number, 
    technical_skills: Number, 
    communication:Number, 
    employees: String, 
    profile_image: String, 
    biodescription: String, 
    twitter: String, 
    facebook: String, 
    instagram: String, 
    linkedin: String, 
    biodescription: String, 
    positionsApplied:[{ 
          position_id:String, 
          index_position: Number 
    }], 
    experience: [{ 
      title: String, 
      location: String, 
      company: String, 
      start: String, 
      end:String, 
      description:String 
    }], 
    position: [{ 
        _id:String, 
      title: String, 
      location: String, 
      start: String, 
      term:Number, 
      description:String, 
      date: {type: Date, default: Date.now}, 
      applied:[{ 
       candidate_id: String, 
       profile_image: String, 
       location: String, 
       name: String, 
       _id:String 
         }], 
    }], 
    education: [{ 
      school: String, 
      location: String, 
      degree: String, 
      start: String, 
      end:String, 
      description:String, 
        _id:String 
    }], 

    images: [{ 
        one: String, 
        two: String, 
        three: String, 
        four: String, 
        five:String, 
        six:String 
    }], 
}); 


module.exports = mongoose.model('User', User); 

enter image description here

回答

0

因为你的模式是对象的数组,你得到(根据浏览器的控制台)的数据也是对象为什么不要一个数组你只需要通过ajax传递数组本身(浏览器控制台中的那个),然后使用mongodb $push$each将它保存到数据库中。

$.ajax({ 
     url: "/insertPositionIndex", 
     type: "POST", 
     dataType: "json", 
     data: { 
      arrayOfObjects 
     }, 
     success: function (data) { 
     console.log(data); 
     } 
    }) 

app.post('/insertPositionIndex', function(req, res){ 
var object = req.body.ordered_divs; 
console.log(req.body); 

     User.update(
     { "_id": req.user._id}, 
     { 
     "$push": 
      { 
      "positionsApplied":{ 
       $each: req.body.arrayOfObjects 
       } 
      } 
     } 
    ).exec(function (err, result) { 
      console.log(result); 
      res.send({ results: result }); 
     }); 
}); 

你将不得不改变arrayOfObjects键,以配合您的模式positionsApplied键。

+0

由于某种原因,我收到“Unexpected token:”并且它引用了“$ each:object”这一行,我错过了什么吗? – user

+0

我编辑了代码。试试看。 –

+0

谢谢!当我运行它时,我收回了一个完全空白的对象,但是在控制台中我得到了--->“UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):MongoError:$ push中的$ each参数必须是一个数组,但它是NULL类型的“ – user