Mongoose MongoDB:搜索中的LIKE运算符

时间:2015-04-15 11:09:26

标签: javascript node.js mongodb express mongoose

在阅读了一些使用" LIKE"在猫鼬:

Mongoose.js: Find user by username LIKE value

How to query MongoDB with "like"?

Mongodb dynamic like operator

我使用此代码来模拟" 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,好的。

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

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

var word = 'josephine do';

好的,也有效......

更多例子而不是作品:

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

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

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

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

    (不同的订单单词不起作用)

  • 查找:' josephine

    道尔' - >结果: {}

    (单词之间有多个空格并不起作用)

有什么建议吗?也许是另一个RegEx?谢谢!

1 个答案:

答案 0 :(得分:3)

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

类似的东西:

var name = 'doyle josephine';

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

User
    .find({ $and: toSearch })