【问题标题】:mongo/mongoose query to find field removing spacemongo/mongoose 查询以查找字段删除空间
【发布时间】:2016-08-29 08:55:30
【问题描述】:

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

例如: 系列“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 返回字段数据。这样我就可以检查是否存在相同的系列。

【问题讨论】:

    标签: angularjs node.js mongodb express mongoose


    【解决方案1】:

    理想情况下,您应该在保存记录之前标准化您的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(){...});
    

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

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 2014-11-10
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2017-10-16
      • 2019-03-08
      • 2013-02-22
      • 2015-09-19
      相关资源
      最近更新 更多