使用正则表达式的猫鼬发现不起作用

时间:2015-11-16 22:04:02

标签: javascript node.js mongodb mongoose

我尝试在MongoDB中使用Mongoose进行选择,如下所示:

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');

如果我尝试在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);
        });

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

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

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

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

这件事给我带来了错误的错误:

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

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

//Return correct results
db.products.find({name: /sorv/i})

我使用的Mongoose版本是:

console.log(mongoose.version);
4.2.5

1 个答案:

答案 0 :(得分:2)

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

Product.find({ name: { $regex: 'sorv', $options: 'i'}})