mongo / mongoose查询查找字段删除空间

时间:2016-05-04 05:08:24

标签: angularjs node.js mongodb express mongoose

我们可以创建一个mongoose查询来返回特定字段数据的结果,而中间没有空格吗?

例如: 系列'KA 04 A'和'KA04A​​'是相同的。如果我的mongodb通过mongoose中已经存在新系列,我想在添加新系列时进行检查。

目前我的系列字段之间有空格 我猫鼬的当前代码是:

seriesModel.find({series_name:req.body.seriesName.toUpperCase(), status:'active'}, function(err, data){
        if(err){

            logger.info(err);
            return false;
        }
        else if(data.length){

            return res.json({error:true,message:'Series name already exists.'});
        }

如何在没有空间的情况下从db返回字段数据。这样我就可以检查同一系列是否存在。

1 个答案:

答案 0 :(得分:0)

理想情况下,您可以在保存记录之前标准化series_name字段,使用删除空白的自定义挂钩。

话虽这么说,您可以在查询中使用正则表达式。例如,您可以按如下方式搜索单词“mongoose”的大写/小写变体:

model.findOne({name: /mongoose/i}, fn(){...});

解决问题的一种方法是获取字符串,将其拆分为单个字符,然后在所有字符之间注入空白模式\s(我假设此处没有前导或尾随空格场):

"^" + "KA04A".split("").join("\\s*") + "$" // "^K\s*A\s*0\s*4\s*A$"

(开始^和结束$是必要的,这样我们就不会出现误报,例如“xKA04A​​x”)

接下来,您需要将此字符串转换为正则表达式格式(/^K\s*A\s*0\s*4\s*A$/)并将其插入查询中:

model.findOne({name: new RegExp("^K\\s*A\\s*0\\s*4\\s*A$")}, fn(){...});

Major Caveat:您需要非常小心,原始字符串只包含a-zA-Z0-9和空格。如果没有首先转义这些字符,它就不能包含任何可能被误认为正则表达式模式的内容(有关此方法的更多信息,请参阅here)。