不确定我是否正确行事。
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
db.test.find({ "Email" : { $regex : re}}).count()
这将返回我期望的500个文档计数...但是在集合中的1000个文档中,有意地有500个INVALID电子邮件地址。是的,我可以做数学,但实际上我最终想要检索所有的坏地址。怎么样?
db.test.find({ "Email" : {$not:{ $regex : re}}})
给了我一个错误,我希望在结果游标中有500个文档
Error: error: {
"ok" : 0,
"errmsg" : "$not cannot have a regex",
"code" : 2,
"codeName" : "BadValue"
}
当然,文档似乎支持$ regex不支持作为$ not的一部分的想法。 “re”变量的语法已经非常复杂。
我必须在本机mongo / javascript中查询哪些文档集合,其电子邮件元素不是基于复杂正则表达式的有效电子邮件地址?
mongo相当新... ...错误地丢失了sql server ...但愿意并热心为客户提供这个解决方案,以解决它将为这个项目提供的许多伟大的事情。
感谢您(所有)可能提供的任何见解。
麦克
答案 0 :(得分:1)
您的查询已关闭,根据文档,您可以将正则表达式放入$not
表达式。
这将返回与您的正则表达式不匹配的所有电子邮件地址。
db.test.find( { Email: { $not: re } } )
https://docs.mongodb.com/manual/reference/operator/query/not/