Express:POST数据到一个数组mongoose&节点

时间:2017-06-15 08:12:06

标签: arrays node.js mongodb express mongoose

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

这是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 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
        }

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

我会这样修改你的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 / generator或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();