如何使用mongoose在mongodb中查询我的用户集合中的用户数组?

时间:2016-12-08 20:26:51

标签: node.js mongoose

我在我的节点和mongodb应用程序中注册了一些用户(以及他们的联系号码)的集合。 现在我有一系列联系电话。我希望在我的应用程序中获得此阵列与用户的交集。怎么做,因为我不能拿每个号码并检查它在数据库中是否存在。任何帮助/链接都会有所帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用$in运算符。如果您至少提供了一些代码,例如您的模式,之前的尝试等,那将会非常有用。

以下是如何执行ii的示例,假设您使用的是mongoose,并且具有number属性和数组numbers的用户架构。

User.find({ number: { $in: numbers } })
  .then(function (docs) {
    // do something with docs here;
  })
  .catch(handleErr);

答案 1 :(得分:0)

这可以简单地使用promises来完成。我假设您有一系列联系号码和一个集合用户,其中包含现场联系号码。以下功能将为您提供阵列中列出的联系号码的所有用户列表。我假设User模型可用,并且联系人数组作为函数参数传递。基本上,此函数将遍历联系人列表数组,并在用户集合中查找具有该联系人的任何用户并返回承诺。所有承诺都被推送到一个数组中,只有当所有异步操作都完成后才会解决承诺,从而导致成功或错误。

// import User from User-model-defition
function getUsersByContact(contactArr) {
 return new Promise((resolve, reject) => {
  const data = [];
  const errors = [];
  contactArr.map(id => {
      User.findOne({ contact_no : id })
     .then(response => {
        if (response.user) { //checking if the response actually contains a user object
        data.push(response.user);
      } else {
        errors.push(response.error);
      }
      if (contactArr.length === data.length + errors.length) {
       //this makes sure that the promise will be resolved only when all the promises have been resolved
       resolve({ data, errors });
     }
     })
    .catch(error => reject(error)); 
   })
 })
}