【问题标题】:Express: POST data to an array mongoose & nodeExpress: POST 数据到数组 mongoose 和节点
【发布时间】:2017-11-17 15:10:19
【问题描述】:

我正在构建一个简单的应用程序,一家公司在其中向员工发送问题以征求反馈意见。我正在努力将更多员工(用户)作为数组放入问题文档中。现在它只插入一名员工。基本上我需要的是让员工对每个问题做出回应,并且能够(将来)查询数据库以获取员工回答的所有问题。这是我的架构。

这里是previous issue that was solved - 任何感兴趣的人。

模型

var QuestionSchema = Schema({
    id          : ObjectId,
    title       : String,
    employees   : [{ type: ObjectId, ref: 'User'}]
});

module.exports = mongoose.model('Question', QuestionSchema);  

var UserSchema = Schema({
    username    : String,
    response    : String,
    questions   : [{ type: ObjectId, ref: 'Question'}]
});

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

api.js

         Question.findOne({ title: 'Should we buy a coffee machine?'}).exec(function(err, question) {
              //example: is this the right way of creating the array
              var user = new User([{
                "username": "lindelof",
                "response": "yes",
              },{
                "username": "bailly",
                "response": "no",
              },{
                "username": "suzan",
                "response": "yes",
              }]);

              question.employees = [user1._id];
              user.questions = [question._id];

              question.save(function(err) {
                  if (err) throw err;
                  console.log(question);
                  user1.save(function(err) {
                      if (err) throw err;
                  });
              });

            });
            console.log('entry saved to answer >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
        }

【问题讨论】:

    标签: arrays node.js mongodb express mongoose


    【解决方案1】:

    我会这样修改你的 api.js:

    Question.findOne({ title: 'Should we buy a coffee machine?'}).exec(function(err, question) {
      const userData = [{
        "username": "lindelof",
        "response": "yes",
      },{
        "username": "bailly",
        "response": "no",
      },{
        "username": "suzan",
        "response": "yes",
      }];
    
      for (const user of userData) {
        const userModel = new User(user);
        userModel.questions = [question._id];
        // Its async, but in this example - no need to wait untill it is executed
        userModel.save();
        question.employees.push(userModel._id);
      }
    
      question.save(function(err) {
        if (err) throw err;
        console.log(question);
      }
    });
    

    另外,我可以建议你看看 promises/generators 或 async/await 方法。这样阅读起来就容易多了。

    使用 async/await 格式化的相同代码:

    async function doJob() {
      const question = await Question.findOne({ title: 'Should we buy a coffee machine?'});
    
      const userData = [{
        "username": "lindelof",
        "response": "yes",
      },{
        "username": "bailly",
        "response": "no",
      },{
        "username": "suzan",
        "response": "yes",
      }];
    
      for (const user of userData) {
        const userModel = new User(user);
        userModel.questions = [question._id];
        await userModel.save();
        question.employees.push(userModel._id);
      }
    
      await question.save();
      console.log(question);
    
    };
    
    // And sure we have to call this function somewhere...
    doJob();
    

    【讨论】:

    • 工作感谢! async 方法虽然指向 async function doJob(),但会引发“SyntaxError: Unexpected token function”错误
    • 很可能你有旧的nodejs版本,更新它。
    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 2020-11-19
    • 2022-11-10
    • 2017-08-14
    • 2020-11-11
    • 2014-04-25
    • 2018-09-10
    • 2019-12-11
    相关资源
    最近更新 更多