使用node和mongodb在单个数组中创建多个文档的过程是什么?

时间:2016-09-02 08:47:18

标签: javascript arrays node.js mongodb

这是节点js代码,我用它在单个数组中插入多个JSON文档。我使用此节点js代码并使用此架构在MongoDB中插入值。我已正确插入文档,但每次插入文档时都会创建一个包含所有值的新文档。 这是否可能每次我插入questionId得分和时间它将存储在测验数组内?否则,创建一个新的测验文档 mongodb中的数组。 例如[{"0":questionId:1,"score":1,"time":1-Sep-2016},{"1":questionId:2,"score":0,"time":1-Sep-2016} ....等]在测验数组中。

1)。这个节点是我正在使用的代码

    try {

    var quizArr = [];
    var quizObj = {
        'questionId': req.params.questionId,
        'score': req.params.score,
        'time': new Date().toISOString()

    };
    quizArr.push(quizObj);
    var userObj = {
        'userId':req.params.userId,
        'quiz':quizArr
    };


    var childinfoSave = new quizChild(userObj);

    childinfoSave.save(function (err, data) {
        if (err) {
          return next(err);
        }else{
          //res.send("Child questionId score and date saved successfully" + data);
          res.send(data);
          console.log("Child questionId score and date saved successfully");
        }
    });
} catch (err) {
    console.log('Error While Saving the child questionId score and Date ' + err);
    return next(err);
  }

2)。我正在使用这个架构

    2). Schema


  quiz: {type: Array,
   questionId: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'Question',
          index: true
          },
  score: { type: Number },
  time: { type: String }
  } 

3)。这是MONGODB

中存储的结果
   {
    "_id" : ObjectId("57c1549926bbb3891a90db1a"),
    "quiz" : [
     {
        "questionId" : ObjectId("57c14a36b78cd543fc59b827"),
        "score" : 1,
        "time" : "2016-08-27T08:51:37.503Z",
        "_id" : ObjectId("57c1549926bbb3891a90db1b")
    }
  ],
  "__v" : 0
  }
  {
  "_id" : ObjectId("57c154a626bbb3891a90db1c"),
  "quiz" : [
     {
        "questionId" : ObjectId("57c14a36b78cd543fc59b828"),
        "score" : 1,
        "time" : "2016-08-27T08:51:50.898Z",
        "_id" : ObjectId("57c154a626bbb3891a90db1d")
     }
 ],
 "__v" : 0
 }

4)我想在一个具有多个Object的测验的单个数组中创建单个文档,而不是上面两个文档。

   {
    "_id" : ObjectId("57c1549926bbb3891a90db1a"),
   "quiz" : [
       {
          "questionId" : ObjectId("57c14a36b78cd543fc59b827"),
          "score" : 1,
          "time" : "2016-08-27T08:51:37.503Z",
          "_id" : ObjectId("57c1549926bbb3891a90db1b")
        },
      {
        "questionId" : ObjectId("57c14a36b78cd543fc59b828"),
        "score" : 1,
        "time" : "2016-08-27T08:51:50.898Z",
        "_id" : ObjectId("57c154a626bbb3891a90db1d")
    }
    ],
  "__v" : 0

1 个答案:

答案 0 :(得分:0)

插入第一条记录后,您需要在下次收到请求时更新它。

db.collName.update({ "_id" : ObjectId("57c1549926bbb3891a90db1a")},
                    {$push:{quiz : quizObj}});

或者

 db.collName.update({ "userId" : ObjectId(req.params.userId.toString())},
                    {$push:{quiz : quizObj}});

有关如何更新的详情,请参阅update-mongodb