Mongoose 多个查询在第二次查询后返回

Posted

技术标签:

【中文标题】Mongoose 多个查询在第二次查询后返回【英文标题】:Mongoose multiple queries return after second query 【发布时间】:2021-02-16 09:56:42 【问题描述】:

我正在尝试取回包含用户名和 url 属性的“图像”,但似乎第一个查询首先返回。为我的菜鸟知识道歉。

exports.getImg = (req, res) => 
    Image.find(, '-__v').lean().exec((err, images) => 
        if (err) 
            res.sendStatus(400)( 'msg': 'Something went wrong' );
        
        
        for (let i = 0; i < images.length; i++) 
           //trying to get 
            User.findOne( _id: images[i].id, (err, user) => 
                images[i]['username'] = user.uname;
                images[i]['url'] = req.protocol + '://' + req.get('host') + '/images/' + images[i]._id;
            );
        
        // console.log(images);
        // res.json(images);
    )

【问题讨论】:

【参考方案1】:

这是由于 .find() 函数是异步的。因为您正在循环并且还在循环中使用 .find() 所以它不会给出想要的结果。你需要使用 async/await。

exports.getImg = async (req, res) => 
Image.find(, '-__v').lean().exec(async(err, images) => 
    if (err) 
        res.sendStatus(400)( 'msg': 'Something went wrong' );
           
    for (let i = 0; i < images.length; i++) 
       //trying to get 
        await User.findOne( _id: images[i].id, (err, user) => 
            images[i]['username'] = user.uname;
            images[i]['url'] = req.protocol + '://' + req.get('host') + '/images/' + images[i]._id;
        );
    
    // console.log(images);
    // res.json(images);
)

【讨论】:

您好,感谢您的帮助,但我有“语法错误:等待仅在异步函数中有效”作为错误。

以上是关于Mongoose 多个查询在第二次查询后返回的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在第二次运行测试时在 Mongoose 中收到错误“一旦编译后无法覆盖模型”?

使 mongoose.js 查询同步运行

使 mongoose.js 查询同步运行

Firebase Firestore get() 快照在第二次查询时冻结

如何使用 Mongodb 或 Mongoose 查询并使用 javascript 打印?

在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 null 时保留第一个查询的结果