比较数字时,如何将变量与 mongo 'like' 操作一起使用?

时间:2021-02-05 10:55:04

标签: javascript node.js api mongodb-query

我在不使用单独变量 search_num 的情况下尝试了相同的方法并使用了搜索变量本身,但同样的问题仍然存在,这就是我进行类型转换的原因。用邮递员测试过 这是我的架构 -

const lender_details = mongoose.Schema({
        lender_id : Number,
        investment_id: Number,
        name: String,
        email: String,
        mobile_no : Number,
        reg_date: Number,
        live_status: String,
        lender_details: String,
    })

我想要做的就是有一个通用的搜索框,可以搜索投资 ID、电话和电子邮件。

router.post('/', async (req,res,next) => {
    search = req.body.search;

    search_num = Number(search);
    console.log({$regex : search_num});
   await a.find({
     "investment_id" :($regex : search_num),
       "email" : { $regex : search } }
    ,{ _id : false })

/m/ 概念在使用变量时不起作用,因此我使用了正则表达式,但是在尝试了几乎所有内容之后,当我尝试搜索数字形式的投资 ID 时,此错误仍然存​​在 - 对于模型“lender_details”的路径“investment_id”中的值“/1/”,强制转换为数字失败 任何和所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

Iirc 你应该先用一些搜索管道把它翻译成字符串,然后你可以用正则表达式搜索它; 让我展示一些例子;

a.find({
"$expr": {
    "$regexMatch": {
       "input": {"$toString": "$investment_id"}, 
       "regex": search_num_regexp 
    }
})

iirc 您可以使用 where 运算符,但它可能会降低性能查询,我不确定它是否能正常工作。但它会像下面一样

a.find({
  $where: `${search_num_regexp}.test(this.example)`
})
相关问题