Mongo:保存一组对象

时间:2015-11-28 22:39:23

标签: javascript jquery ajax mongodb mongoose

我正在尝试在一次保存中将一组对象保存到我的mongo db中。我想先将每个新对象存储到一个临时数组中,然后通过ajax post请求将其发送到server.js。但每次它到达服务器时,数据只变成一个巨大的对象,而不是一个对象数组。我正在尝试用Mongo做什么,或者我错过了什么?这是我下面的代码。

SCHEMA

    var capsuleSchema = new mongoose.Schema({
    qa: [{
        type: mongoose.Schema.Types.ObjectId, ref: 'Question',
        question: String,
        answer: String
    }],
    user: { type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    date_of_return: Date,
    created_at: { type: Date, default: Date.now }
});

    var Capsule = mongoose.model('Capsule', capsuleSchema);
    module.exports = Capsule;

APP.JS

    var temp_id = id;
    var temp_q = quest;
    var temp_ans = $('#response').val();

    var tempQA = {
      id: temp_id,
      question: temp_q,
      answer: temp_ans
    };

    saveQuestion(tempQA);

    var saveQuestion = function(tempQA) {
      answeredQuestions.push(tempQA);
    }
    var capsuleData = {
        questions: answeredQuestions
    }

    newCapsule(capsuleData);

    var newCapsule = function(capsuleData) {
        $.ajax({
            url: "http://localhost:3000/capsules",
            method: "POST",
        dataType: 'json',
            data: capsuleData
        }).done(function(data){
        // returns "capsule creation complete"
        });
    }; // end newCapsule

SERVER.JS

app.post('/capsules', function(req, res) {
  var qa_array = [];

  var capsule = new Capsule({
    qa: req.body.questions,
    user: req.cookies.loggedinId,
  });

  capsule.qa.push(req.body)

  capsule.save( function(err, capsule) {
    if (err) {
      console.log(err);
      res.statusCode = 503;
    } else {
      res.send(capsule);
    }; // end if/else
  }); // end save
}); // end post time-capsule

更新 我不小心将newCapsule(capsuleData)放在了胶囊对象中.--已修复。

我认为问题出在ajax请求中。当对象数组通过并到达server.js时,它甚至在我在服务器端对它做任何事情之前,都会重新格式化为一个包含数组无名,key:value对的对象和数组。 (“即:'问题[0] [id]':'12345','问题[0] [问题]':'你好吗?'”等等。

我需要它作为一个对象数组保留。

2 个答案:

答案 0 :(得分:0)

如果您想保存多个文档,请尝试db.collection.insert

Check it out

答案 1 :(得分:0)

以下代码在语法上不正确。 capsuleData不是一个对象文字的函数。

var capsuleData = { questions: answeredQuestions newCapsule(capsuleData); }

以下代码将方法附加到对象。您还需要将Capsule()包含为可访问的javascript函数,以便new Capsule()可以创建javascript对象。但这仍然是创建一个对象而不是一个数组。您需要创建阵列客户端,然后将其传递给要处理的服务器。

var capsuleData = { questions: answeredQuestions,
anObjectMethod : new Capsule(capsuleData); }

请查看此内容以获得更深入的帮助https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript