【问题标题】:Insert array into MongoDB subdocument with Node.js使用 Node.js 将数组插入 MongoDB 子文档
【发布时间】:2017-09-14 16:40:11
【问题描述】:

我目前有一个如下所示的架构:

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

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

如何通过 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 });
      });
      });

非常感谢任何帮助! * 注意schema中的position_id字段是数组中的div_id,index-position字段也是数组中的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);

【问题讨论】:

    标签: arrays node.js mongodb insert subdocument


    【解决方案1】:

    由于您的 Schema 是一个对象数组,而您获取的数据(根据浏览器的控制台)也是一个对象数组,为什么不直接传递该数组本身(在控制台中的那个)浏览器)通过ajax并使用mongodb的$each$push保存到数据库中。

    $.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 键。

    【讨论】:

    • 由于某种原因,我得到了“Unexpected token :”并且它引用了“$each: object”行,我错过了什么吗?
    • 谢谢!当我运行它时,我得到了一个完全空白的对象,但是在控制台中我得到了--->“UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 1): MongoError: The argument to $each in $push must是一个数组,但它的类型为 NULL"
    • arrayOfObjects 是否进入您的发布路线?检查console.log(req.body.arrayOfObjects) 中的内容。是NULL吗?
    • position_id 都是用户集合中子文档的一部分,我已更新问题以显示我的用户架构。当我在控制台中登录时,我会取回 position_id 所属的整个文档..所以我基本上会取回 3 个用户,因为我有 3 个文档。
    • 但是我上面贴的错误信息在日志的最后还在!
    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2017-02-25
    • 2014-06-21
    • 1970-01-01
    • 2023-04-05
    • 2013-02-13
    相关资源
    最近更新 更多