gpt4 book ai didi

javascript - Mongoose 查询完数据库后返回一个函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:08 25 4
gpt4 key购买 nike

编辑

我已经成功做到了。我使用了很棒的异步模块。解决办法如下:

async.each(req.body.users, function(userId, next) {
User.count( { _id: userId } ).exec(function(err, count) {
if(count === null) {
next("Doesn't exist);
} else {
next();
}
}, function(err) {
if(err) {
console.log(err);
} else {
console.log("success");
}
});

问题

我的场景如下。我正在向数据库 Controller 发出发布请求,以便在数据库中创建文档。该请求显然包含表单中的数据,存储在 req.body 中。我想在将数据推送到数据库之前检查数据是否正确,我通过调用函数来检查它。

其中一个字段是 user._id 数组,我想检查所有这些是否都属于某个用户。

我的实现方式如下:

req.body.users.forEach(function(userId) {
User.count({ _id: userId }).exec(function(err, count) {
if(count === 0) {
return false;
}
}
}
return true;

所以基本上,我调用 mongoose 来计算数据库中有多少文档具有给定的 id,如果答案为零,则该字段不包含有效值,并且该函数返回 false。否则,它应该返回 true。

问题是对数据库的所有调用都是异步的,因此该函数在检查所有用户 ID 之前返回 true。

我想过使用 Promise,但我不知道从哪里开始。大家有什么想法或建议吗?

提前致谢!干杯。 :)

最佳答案

所以你要做的是检查每个给定的 idUser 是否正常。

在我的示例中,我执行一个请求,该请求将返回具有 req.body.users 内 id 之一的每个用户。

最后,我检查我想要检查的用户数量是否与我获取数据的用户数量相同。如果不匹配,则意味着我们的 idUser 不在数据库中。

  User.find({
_id: {
$in: req.body.users,
},
}, '_id')
.then((rets) => {
if (rets.length !== req.body.users.length) {
//
// /!\ Unknown idUser
//

throw new Error('...');
}

// All is alright
})
.catch((err) => {
...
});

在我的示例中,我使用了 Promise 对象,以及 projection

关于javascript - Mongoose 查询完数据库后返回一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47474545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com