2011-04-10 72 views
3

這有點棘手..你如何對ObjectId字段進行正則表達式查詢?如何對mongodb ObjectId字段進行正則表達式查詢

我使用的Java API,所以這是我迄今爲止

BasicDBObject q = new BasicDBObject() 
q.put(field, Pattern.compile(value, Pattern.CASE_INSENSITIVE)); 

這工作正常任何常規領域。但似乎不適用於ObjectId字段。我認爲是因爲我無法比較一個ObjectId字符串?我不能完全將部分id或正則表達式放入新的ObjectId中。它只會拋出一個錯誤。

對此有什麼想法?我試圖給用戶一種輸入id的一部分的方法,並且能夠找回具有該模式的所有文檔。

在此先感謝!

+2

用正則表達式搜索objectid確實沒有任何意義。 – 2011-04-10 16:33:25

回答

4

據我所知,ObjectId在MongoDB中是一種自己的類型,並不像一個字符串。儘管MongoDB中有其他類型與字符串不同,比如數組等,它們可以通過正則表達式模式進行搜索,但這似乎不可能用於ObjectId。要實現一個像你的id搜索,我可能會定義一個自己的索引id字段,其中包含一個id作爲一個簡單的字符串和冷肩ObjectId。

+0

好吧,你總是可以將objectid存儲爲字符串並進行查詢。這種方法的實際應用不容置疑。 – 2011-04-10 17:04:12

+0

是啊,我在想同樣的事情...更糟的情況下,我不得不存儲一個新的領域,作爲一個字符串objectid ... – Khon 2011-04-10 17:41:41

+2

洛基是正確的;我們將ObjectId作爲MongoDB中的一種特殊類型存儲。具體來說,ObjectId的本地表示比字符串版本更緊湊地存儲。 請記住,您不必爲_id的值使用ObjectId:它可以是包括Document的任何有效類型。如果你需要做RE匹配,你應該考慮diff類型;但記住RE匹配不會打索引,除非'^'錨定。 – 2011-04-10 18:45:49