2017-07-26 41 views
1

不知道我在做這個權利。不匹配正則表達式的電子郵件

var re = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[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個無效的電子郵件地址。是的,我可以做數學,但我實際上最終想要檢索所有不良地址。怎麼樣?

db.test.find({ "Email" : {$not:{ $regex : re}}}) 

給我,我本來預計在產生光標

Error: error: { 
    "ok" : 0, 
    "errmsg" : "$not cannot have a regex", 
    "code" : 2, 
    "codeName" : "BadValue" 
} 
當然

500個文件錯誤,文件似乎支持$正則表達式的想法並不支持爲$一部分不。 「re」變量的語法已經非常複雜。

在本地mongo/javascript中,如何根據複雜的正則表達式查詢其電子郵件元素不是有效電子郵件地址的文檔集合,我該做些什麼?

對mongo來說相當陌生...錯過了sql服務器......但願意並熱心地爲客戶提供這個解決方案,以滿足它爲這個項目提供的諸多偉大事物。

感謝您提供任何洞察力(全部)或許能夠提供。

邁克

回答

1

您的查詢功能,按照該文檔,你可以把一個正則表達式爲$not表達。

這將返回與您的正則表達式不匹配的所有電子郵件地址。

db.test.find({ Email: { $not: re } })

https://docs.mongodb.com/manual/reference/operator/query/not/

+0

有趣的是這是實際可行的。因此,明確包含'$ regex'似乎是個問題。 –

+0

正確...我的意思是$ not,正則表達式是$ regex,而不是一般的表達式。顯然這種解決方案工作得很好......雖然我發誓我嘗試了它......事實上,我以爲我曾嘗試過使用文字正則表達式字符串,而不是變量,它失敗了......但只是再試一次,它的工作精細。感謝88指出我顯然只是一個白癡......解決方案工作得很好。我想我還有很多東西需要學習。現在,讓這個工作在Java中:) –

相關問題