使用正则表达式查找猫鼬不起作用

Lai*_*290 1 javascript mongoose mongodb node.js

我尝试做一个选择在MongoDBMongoose像这样的东西:

SQL SELECT * FROM PRODUCTS WHERE NAME LIKE '%Sorv%';

所以,我有一个Product模型:

mongoose.model('Products'
    , new mongoose.Schema({
            name: {type: String, default: ''},
            price: {type: Number, default: 0},
            prices: [Number]
        })
    , 'products');
Run Code Online (Sandbox Code Playgroud)

如果我尝试在Product模型中获取所有寄存器,它将返回正确的:

Product.find()
        .then(function (result)
        {
            var names = result.map(function (item)
            {
                return item.name;
            });
            // return ["Sorvete", "Sorvete Morango", "Sorvete Morango", "Sorvete", "Sorvete"]
            console.log(names);
        });
Run Code Online (Sandbox Code Playgroud)

为什么当我Regex根据Mongoose文档进行查找时,它返回一个空数组?

Product.find({name: /Sorv/})
        .then(function (result)
        {
            // return a empty array: []
            console.log(result);
        });
Run Code Online (Sandbox Code Playgroud)

如果我设置mongoose.set('debug', true);并执行空闲代码:

Product.find({ name: new RegExp('sorv', 'i') })
.then(function(r){
    console.log(r);
})
Run Code Online (Sandbox Code Playgroud)

这个返回给我的错误:

[0;36mMongoose:[0m products.find({ name: [32m'/sorv/i'[39m }) { fields: [90mundefined[39m } 
Run Code Online (Sandbox Code Playgroud)

但是如果我在 mongo 命令中执行查询,它会返回正确的结果

//Return correct results
db.products.find({name: /sorv/i})
Run Code Online (Sandbox Code Playgroud)

我使用的猫鼬版本是:

console.log(mongoose.version);
4.2.5
Run Code Online (Sandbox Code Playgroud)

小智 8

我遇到了同样的问题,设法像下面那样解决它(如here中所述

Product.find({ name: { $regex: 'sorv', $options: 'i'}})
Run Code Online (Sandbox Code Playgroud)