2014-07-20 25 views
0

我相信這個問題以前一定要問過,但是我找不到這個主題的任何參考。等效於MongoDB查詢中的JavaScript非嚴格比較

我使用本地JavaScript驅動程序使用URL查詢字符串上提供的數據作爲輸入來查詢MongoDB集合,因此它不包含類型信息,只是簡單地將其視爲String

問題是,我試圖匹配這個輸入的數據可能是集合中的不同類型,例如Number,但我無法提前預測此數據。至於我可以看到蒙戈默認比較運營商嚴格的語法操作,所以這個查詢:

collection.find({ fieldName: value }) 

相當於這段JavaScript代碼:

fieldName === value 

,而我想申請非嚴格的語法在這種情況下(==),以便"123"的值將與"123"123都匹配。

有沒有人知道這是可能的,而不會影響查詢的性能?

+0

標準化所有數據輸入到字符串是不是真的很容易? – Sammaye

+0

不一定,例如,如果您正在處理現有的數據存儲。我知道有解決方法,我的問題是這是否可能與mongo(你回答btw) – Simone

+0

確實,是的,mongodb目前沒有$ lose操作符 – Sammaye

回答

0

的問題是,我試圖來匹配該輸入可以是不同類型的集合中的數據,比如一些,但我不能提前預知這。

如果你不能正常化你的價值觀,以一致的類型,你總是可以使用$in operator找到替代品,如:

db.test.find({ fieldName: { $in: [123, "123"]}}) 

fieldName的指數將包括數字和字符串值。

要注意混合類型的一個警告是按該字段排序可能無法按預期工作。數字和字符串有不同Lexicographical Order,例如:

> db.test.find({}, {_id: 0, fieldName:1}).sort({fieldName:1}) 
{ "fieldName" : 123 } 
{ "fieldName" : 456 } 
{ "fieldName" : 1233 } 
{ "fieldName" : 4566 } 
{ "fieldName" : "123" } 
{ "fieldName" : "1233" } 
{ "fieldName" : "456" } 
{ "fieldName" : "4566" } 
0

的問題是,我試圖來匹配該輸入可以是不同類型的集合中的數據,比如一些

聽起來像大多數數據庫一個顯著問題通過數據類型實現一定程度的安全性。

如果你在MySQL中沒有考慮它,這可能是一個真正的問題,例如,默認情況下它會失去比較,沒有其他設置。

由於失去了比較,你可以實際返回你不應該或者你不想要的數據(你怎麼把字符串轉換爲int?)。

無論如何是的,這聽起來像是一個不應該存在的合適問題。

但我無法預測此事。

但是你可以將你的所有輸入標準化爲字符串,不管是什麼。所以即使是純數字也要以字符串的形式進行比較。

這種方式不需要數據類型的雜耍,你可以以標準化的方式進行查詢。

反正

有誰知道這是否可能在不損害查詢的性能?