我有一个Mongo用户数据库,我正在用Mongoose查询.我想做findOne来确定用户是否已经存在.我想让它先搜索一个用户是否已经有邮箱,如果没有,它应该搜索一个用户是否有手机.这必须在两个单独的查询中完成,还是可以合并成一个查询?

User.findOne({ email: req.body.email }).exec(function(err, user){

  if (user) //user already exists with email
  else //no users with that email but we haven't checked phone number yet!

});

推荐答案

为什么不直接使用$or操作符呢?

User.findOne({$or: [
    {email: req.body.email},
    {phone: req.body.phone}
]}).exec(function(err, user){
    if (user) {} //user already exists with email AND/OR phone.
    else {} //no users with that email NOR phone exist.
});

以下是伪SQL的等效值:

SELECT * FROM users WHERE email = '%1' OR phone = '%2'

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

Next js、MongoDB和Prisma.包括不为相关字段工作

多键索引,性能问题

避免在 MongoDB 聚合框架中使用 ISODate() 以便管道可以是纯 JSON

lexik_jwt_authentication下无法识别的选项api_platform

MongoDB - 文档中多个数组大小的总和

MongoDB 存储大量指标/分析数据的方法

mongo.lock 文件有什么用?

将MongoDB连接到前端?

mongodb - 查找具有最接近整数值的文档

如何更新 mongodb 文档以向数组添加新元素?

MongoDB 批处理操作的最大大小是多少?

如何使用 MongoDB Compass 对数据进行排序

MongoDB的数据库管理工具

MongoDB - Permission denied for socket: /tmp/mongodb-27017.sock

MongoDB 中的多个 $inc 更新

判断字段是否存在于数组的子文档中

mongoose中的 Date.now() 和 Date.now 有什么区别?

是否可以使用聚合框架对 MongoDB 中的 2 个字段求和?

如何使用户的邮箱在 mongoDB 中唯一?