Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如果文档的"id"已经存在,如何将数组元素推送到数组中;如果"id"不存在,如何创建新文档';不存在?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如果文档的"id"已经存在,如何将数组元素推送到数组中;如果"id"不存在,如何创建新文档';不存在?

Node.js 如果文档的"id"已经存在,如何将数组元素推送到数组中;如果"id"不存在,如何创建新文档';不存在?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用Node.js,mongoose,mongodb,express和angular。 我正在保存答复,以便在猫鼬模型中进行调查。许多人会为某项调查提交答复。当第一个人提交调查回复时,我想为该调查创建一个新文档。当第二、第三。。。。因此,当人们为同一个调查提交回复时,我只想在下面的模式中将数组元素添加到回复数组中 当第一个人提交新调查的回复时,我想为新调查创建一个新文档。在猫鼬身上我该怎么做 我在他的书中发现了类似的问题但是,这里我想将新回复推送到下一个回复数组索引[]如果找到了_id,否

我正在使用
Node.js
mongoose
mongodb
express
angular
。 我正在保存答复,以便在猫鼬模型中进行调查。许多人会为某项调查提交答复。当第一个人提交调查回复时,我想为该调查创建一个新文档。当第二、第三。。。。因此,当人们为同一个调查提交回复时,我只想在下面的模式中将数组元素添加到回复数组中

当第一个人提交新调查的回复时,我想为新调查创建一个新文档。在猫鼬身上我该怎么做

我在他的书中发现了类似的问题但是,这里我想将新回复推送到下一个回复数组索引[]如果找到了_id,否则创建一个新文档

猫鼬模型

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

 var MCQReplySchema = new Schema({ 

    _id : String,
    surveyname: String,
    replies :[{
        replierId : String,
        answers : [{
            questionId : String,
            answer : String
        }]  
    }]

    });

 module.exports=mongoose.model('MCQReply',MCQReplySchema);
      router.post("/saveMCQAnswer", function(req, res) {

       new MCQReply({

       _id : '123',
        surveyname: 'sample',
        replies :[{
          replierId : 'R001',
          answers : [{
            questionId : 'A001',
            answer : 'answer'
          }]  
        }]

    }).save(function(err, doc){
      if(err) res.json(err);
      else
      req.flash('success_msg', 'User registered to Database');  
      res.redirect("/");

    });

   });
将数据保存到数据库中

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

 var MCQReplySchema = new Schema({ 

    _id : String,
    surveyname: String,
    replies :[{
        replierId : String,
        answers : [{
            questionId : String,
            answer : String
        }]  
    }]

    });

 module.exports=mongoose.model('MCQReply',MCQReplySchema);
      router.post("/saveMCQAnswer", function(req, res) {

       new MCQReply({

       _id : '123',
        surveyname: 'sample',
        replies :[{
          replierId : 'R001',
          answers : [{
            questionId : 'A001',
            answer : 'answer'
          }]  
        }]

    }).save(function(err, doc){
      if(err) res.json(err);
      else
      req.flash('success_msg', 'User registered to Database');  
      res.redirect("/");

    });

   });
伪未测试代码

    MCQReply.findOne({_id : the id}, function(err,doc){
        if(err) console.log(err);
        // if the survey isn't there `doc` will be null then do your save
        if(!doc){
          new MCQReply({

           _id : '123',
            surveyname: 'sample',
            replies :[{
              replierId : 'R001',
              answers : [{
                questionId : 'A001',
                answer : 'answer'
              }]  
            }]

            }).save(function(err, doc){
              if(err) res.json(err);
              else
              req.flash('success_msg', 'User registered to Database');  
              res.redirect("/");

            });                 
        }else(doc){
            //you get mongoose document
            doc.replies.push({replierId : "R001", answer : [{questionId : "A001" ... whatever else you want}]})

            //dont forget to save
            doc.save(do error check)
        }


    })
不知道这是否有效,但如果您在保存_id时遇到问题,请尝试使用此模式()

如果
{strict:false}
不起作用


请尝试
{strict:false,\u id:false}
或只是
\u id:false

\u id
默认情况下实际上是隐式的,Mongoose尝试创建唯一的
\u id
-请参阅。您想自己指定ID的具体原因是什么?您是否看到了yes GPX的可能副本。我正在将surveyId传递给_id。调查已创建。为调查创建的调查和答复的_id必须与您的答案相同。但是,我遇到了一些问题。push({replierId:“R002”,答案:[{questionId:“A002”},{response:“A001”}]});我修改了你的代码。对于最早的回复,它没有保存回复者ID和问题ID。对于第二个答复,请再次输入no replierId,并且在答复[]中没有任何内容。你能帮我吗?模式在上面的问题中。我上传了Robomongo模式的屏幕截图。如果接受,它将可见。如果在模式选项中添加strict:false会怎么样。任何变化。新建
Schema({},strict:fasle)
Ok已编辑。strict用于保存不在
模式中的内容,因此您可能会遇到这种问题。而且_idfalse我认为有助于不显示_id如果您使用自己的
\u id
或告诉mongo不要生成自己的
\u id