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

标签 angularjs node.js mongodb express mongoose

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

例如: 系列“KA 04 A”和“KA04A​​”相同。我想在添加新系列时检查新系列是否已通过 mongoose 存在于我的 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.'});
        }

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

最佳答案

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

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

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

解决问题的一种方法是获取字符串,将其拆分为单个字符,然后在所有字符之间注入(inject)空白模式 \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)。

关于angularjs - mongo/mongoose 查询查找删除空间的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018926/

相关文章:

javascript - Excel for Windows 中的开发工具控制台

javascript - 如何从 JSON 文件目录向 mongoDB 添加许多记录?

java - 如何通过 java 驱动程序通过聚合函数(如 group、count 和 distinct)访问 mongodb 集合?

javascript - 使用 sh 测试用户脚本

node.js - Nodejs 需要 : once or on demand?

通过 Grunt 的 PHP 代码嗅探器非常慢

php - 安装 Mongo PHP 扩展 (php_mongo.dll)

javascript - 使用 Angular 将图像上传到 Kinvey

javascript - 清除 ng-repeat 中的文件输入

angularjs - 初始化非注入(inject) angular.service