在阅读了一些在猫鼬中使用“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 })