mongoose返回函数查询数据库

编辑

我设法做到了。 我用了很棒的asynchronous模块。 以下是解决scheme:

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"); } }); 

我的情况如下。 我正在向db控制器发出一个post请求,以便在db中创build一个文档。 这个请求显然包含来自表单的数据,存储在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计数有多less文件在数据库中有给定的ID,如果答案是零,该字段不包含有效的值,该函数返回false。 否则,它应该返回true。

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

我想到使用承诺,但我不知道从哪里开始。 有没有人有任何想法或build议?

提前致谢! 干杯。 🙂

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

在我的例子中,我执行一个请求,它将返回每个拥有req.body.users中的id的req.body.users

然后检查我想检查的用户数是否与我获得数据的用户数相同。 如果不匹配,则意味着我们有一个不在数据库中的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对象和投影