我们可以创建一个 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$"
(开始 ^
和结束 $
是必要的,这样我们就不会在“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(){...});
主要警告:您需要非常小心,原始字符串仅包含 a-zA-Z0-9
和空格。如果不先转义这些字符,它就不能包含任何可能被误认为正则表达式模式的内容(有关此方法的更多信息,请参阅 here)。
关于angularjs - mongo/mongoose 查询查找删除空间的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018926/