我们可以创建一个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返回字段数据。这样我就可以检查同一系列是否存在。
答案 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$"
(开始^
和结束$
是必要的,这样我们就不会出现误报,例如“xKA04Ax”)
接下来,您需要将此字符串转换为正则表达式格式(/^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)。