【问题标题】:Moongose MongoDB: LIKE operator in searchMongoose MongoDB:搜索中的 LIKE 运算符
【发布时间】:2015-06-21 07:40:00
【问题描述】:

在阅读了一些在 Mongoose 中使用“LIKE”的解决方案后:

Mongoose.js: Find user by username LIKE value

How to query MongoDB with "like"?

Mongodb dynamic like operator

我正在使用此代码在 Mongoose 中模拟“SQL LIKE”:

查找:'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,OK。

现在我想用同样的代码,但是用这个词来搜索:

查找:'josephine do' --> 结果:Josephine Doyle

var word = 'josephine do';

好的,也可以...

比作品更多的例子:

  • 查找:'josephine doyle' --> 结果:Josephine Doyle

  • 查找:'jos doyle' --> 结果:Josephine Doyle

但是,我想解决这个问题:

  • 查找:'doyle josephine' --> 结果:{}
  • 查找:'do josephine' --> 结果:{}
  • 查找:'doyle jo' --> 结果:{}

    (不同的顺序词不起作用)

  • 查找:'约瑟芬

    doyle' --> 结果:{}

    (单词之间不能有多个空格)

有什么建议吗?也许另一个正则表达式?谢谢!

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    您可以通过拆分字符串并使用$and 搜索每个单词来做到这一点。

    类似:

    var name = 'doyle josephine';
    
    var toSearch = name.split(" ").map(function(n) {
        return {
            name: new RegExp(n.trim(), 'i')
        };
    });
    
    User
        .find({ $and: toSearch })
    

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多