首页 > 解决方案 > 使用 Mongoose 遍历数组并从 MongoDB 返回第一个匹配项

问题描述

Users我的数据库中有一个具有相应唯一性的集合ids。我正在编写一个以 id 数组作为参数的函数,例如: ["user_id1", "user_id2", "user_id3", "user_id4"].

我希望我的查询返回第一个也是唯一一个匹配项。即使用上面的示例,如果user_id2并且user_id4是数据库中仅有的两个匹配用户,我的结果将只返回user_id2。不在数据库中的用户 ID 将被忽略。

我目前的方法是使用while循环,但我想看看Mongoose是否提供了更好的解决方案。

当前伪代码:

function findOneUser(userIdArr) {
    let user = 0;
    let returnedUser;
    while(!returnedUser || user < userIdArr.length) {
        let id = userIdArr[user];
        user = await User.findByID(id);
        user++;
    }
}

标签: mongodbmongoose

解决方案


试试这个。

使用 promises 和猫鼬 findOne 方法:

 let argumentArr = ["user_id1", "user_id2", "user_id3", "user_id4"];
 let getUser = new Promise(function(resolve, reject) {
   for (let i = 0; i < argumentArr.length; i++) {
     User.findOne({_id:argumentArr[i]}).then(user => {
       if(Object.keys(user).length > 0){
         resolve(user)
       }
     }).catch(err => {reject(err)})
   }
 });

 getUser.then(
  (user) => {console.log(user);},//expected results: user(:object)
  (err) => {console.log(err);}
 );
}

推荐阅读