在阅读了一些在猫鼬中使用“like”的解决方案之后:
Mongoose.js: Find user by username LIKE value
How to query MongoDB with "like"?
Mongodb dynamic like operator
我用这段代码来模拟Mongoose中的“类SQL”:
查找:“Joseph”->结果:Josephine Doyle

var word = 'joseph';

User
    .find({name: new RegExp(word, 'i')})
    .sort('-created')
    .exec(function(err, users){
        if (err) {
            console.log(err);
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {
            res.jsonp(users);
        }
    });

结果是用户Josephine Doyle,好的。
现在我想使用相同的代码,但是要搜索这个单词:
查找:“josephine do”->结果:josephine doyle
var word = 'josephine do';

好吧,也行……
实例多于实际效果:
查找:“Josephine Doyle”->结果:Josephine Doyle
查找:“jos doyle”->结果:josephine doyle
但是,我想解决这个问题:
find:'doyle josephine'-->结果:{}
find:'做约瑟芬'-->结果:{}
find:“doyle jo”->结果:{}
(不同顺序的单词不起作用)
发现:“约瑟芬
Doyle'-->结果:{}
(单词之间有多个空格不起作用)
有什么建议吗?也许是另一个正则表达式?谢谢!

最佳答案

可以通过拆分字符串并使用$and搜索每个单词来完成此操作。
类似于:

var name = 'doyle josephine';

var toSearch = name.split(" ").map(function(n) {
    return {
        name: new RegExp(n.trim(), 'i')
    };
});

User
    .find({ $and: toSearch })

09-07 18:46