【问题标题】:OR operator with query builder in mongoose.jsmongoose.js 中带有查询生成器的 OR 运算符
【发布时间】:2026-01-25 13:35:01
【问题描述】:

如何在 Mongoose 中使用查询生成器执行“OR”运算符?

我尝试过这样的事情:按 ID 或用户名查找用户 但它没有用。

User.findOne({})
      .where( '_id', 'username').equals(param)

【问题讨论】:

  • “或”在哪里?你能写出你想要实现的伪代码吗?你用的是哪个版本的猫鼬?
  • 好吧,@boroboris 这是我的问题...如何在猫鼬中进行 OR,我使用的是最新版本的猫鼬
  • 我想问一下您要使用的具体或条件。
  • 哦,抱歉,我试图在 WHERE 中以这种格式 '_id', 'username' 传递一个选项
  • 我在这里找到了部分答案:*.com/questions/7382207/…,所以你也可以看看

标签: javascript mongoose


【解决方案1】:

尝试这些方法:

User.findOne({
     $or:[ 
       {'condition_1':param}, {'condition_2':param} 
     ]},
     function(err,docs){
       if(!err) res.send(docs);
     }
  });

【讨论】:

  • 在没有where的情况下尝试一下。虽然还没有测试过这个解决方案
【解决方案2】:

我的解决方案

// Needed to user ObjectID comparison
const { ObjectID } = require('mongodb'); 

// Check if param is a valid ID otherwise is Username
let id_or_username = ObjectID.isValid(id) ? '_id' : 'username';

// Find post by ID or Username
Home
  .findOne({})
  .where(id_or_shortid).equals(id)
  .exec(callback)  

【讨论】: