2016-11-18 57 views
0

我在我的應用程序中有一個搜索字段,我希望用戶輸入一個搜索詞並在每個Mongo文檔的各個字段中搜索。當然,我可以在String(目前使用正則表達式)類型的字段中搜索數據,但是如何爲Date類型或Int類型的用戶執行此操作?是否可以在類型爲Date或Int的MongoDB字段中進行搜索?

注意:當我在字段中說搜索時,我的意思是如果用戶在搜索字段中鍵入'16',它將返回包含'16'的日期,例如, 01/01/2016或16/03/2014。整數相同的原則。

回答

-1

是的,這是可能的。

您可以告訴您的find()只查看具有特定數據類型的字段。

$type comes handy. 

查看以下鏈接的示例和用法。 https://docs.mongodb.com/manual/reference/operator/query/type/

一個例子是

db.addressBook.find({"field": "search-value"}, { "field" : { $type : "double" } }) 

將返回這裏搜索值有一個匹配的文件,以及如果字段的類型爲double。

+0

如何將此方法與在字符串類型的字段中搜索相結合? – JoeTidee

+0

上面的查詢不會僅返回字段類型爲「double」的文檔嗎?如果是這樣,這不能解決原來的問題。 – JoeTidee

0

一個快速的方式,我認爲是可以使用$哪裏 值到搜索VAL =「16」

db.foo.find({$where : "function(){ if(this.dateField.toString().indexOf(val)>= 0 || (""+this.intField).indexOf(val)>=0){return true;}}"}) 

什麼基本上你可以嘗試是轉換的字段值轉換爲字符串,然後搜索它在那裏。缺點是$哪裏不使用索引,它基本上掃描集合,當您使用$ where時,不能使用其他運算符。

-1

因爲我有一個圖像,因此張貼它作爲另一個答案,而不是評論。

enter image description here

現在,如果你發現,與ID 2和ID 6文件是完全一樣的。唯一不同的是郵政編碼字段的數據類型。

我用$運行了我的查詢,正如你所看到的,它只帶回匹配的記錄。如果我擺脫了$和$ type條件,它將帶回兩條記錄。

我希望這會幫助你解決你的問題。

+0

問題沒有要求限制基於數據類型返回的結果。它要求在Date或Int32字段中搜索一個數字。 – JoeTidee

+0

好的,我完全誤解它會嘗試找到一個可行的解決方案。 –

相關問題