从另一个 findOne 函数中的 findOne mongoose 获取数据

Posted

技术标签:

【中文标题】从另一个 findOne 函数中的 findOne mongoose 获取数据【英文标题】:Get data from findOne mongoose inside another findOne function 【发布时间】:2021-07-12 11:34:39 【问题描述】:

我正在尝试使用 mongoose 和 nodejs 获取候选人或 HR(用户角色)对象。我有一个用户,两个角色都是从它派生的。

尝试使用唯一用户名和密码进行连接时。结果将发送一个用户对象。我还想发送与该用户相关联的候选人/或 HR。

我通过引用候选/HR 模式来传递用户对象:

   const candidateSchema = new Schema(
  user: 
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
    index: true,
  ,
  fullName: String,
  profilePhoto: String,
  birthday: Date,

我需要在 exec() 函数中获取用户的候选对象。将其保存在变量中并将其作为 res 发送到登录函数

  app.post("/api/auth/signin", (req, res) => 
        User.findOne(
          username: req.body.username,
        )
          .populate("roles", "-__v")
          .exec((err, user) => 
            if (err) 
              res.status(500).send( message: err );
              return;
            
            const candi = candidat.findOne( user: user ).exec((err, candidate) => 
              //I want to save the candidate var 
             ));
            //console.log("res",candi);
            .....
            );

【问题讨论】:

【参考方案1】:

一个简单的解决方案是将您的代码包装在一个 Promise 中,并在您想要发送错误时拒绝您想要存储的任何内容到变量中。 但建议您将代码分解为多个异步函数并等待它们,而不是使用回调执行函数。

app.post("/api/auth/signin", async (req, res) => 
  try
    let response = await new Promise((resolve,reject)=>
        User.findOne(
          username: req.body.username,
        )
          .populate("roles", "-__v")
          .exec((err, user) => 
            if (err) 
              //REJECT ERROR
              reject(err);
              return;
            
            const candi = candidat.findOne( user: user ).exec((err, candidate) => 
              //RESOLVE YOUR CANDIDATE
              resolve(canditate);
             ));
            //console.log("res",candi);
            .....
            );
        .... your rest of code
     ) 

     res.send(response) // or required json
  catch(err)
    res.status(500).send( message: err );
  

【讨论】:

以上是关于从另一个 findOne 函数中的 findOne mongoose 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 中的 Model.findOne() 和 Model.findById() 有啥区别?

FindOne 没有正确找到数组中的项目 discordjs

猫鼬中的 findOne 子文档

猫鼬中的 findOne 子文档

如何使用 MongoDB 聚合 `$lookup` 作为 `findOne()`

forEach 循环中的异步 findOne() 操作