2012-04-09 51 views
1

我想通過搜索id的最後4個字符來搜索我的對象。我怎樣才能做到這一點?Mongoid,通過搜索部分Id來查找對象?

Book.where(_id: params[:q]) 

凡帕拉姆會像a3f4,在這種情況下該對象的實際ID,我不想被發現是:

bc313c1f5053b66121a8a3f4 

通知最後的字符是什麼,我們搜索。我如何搜索我的對象ID的「部分」?而不是讓我的用戶搜索手動輸入整個 ID?

我在MongoDB的幫助文檔中,我可以提供一個正則表達式:

db.x.find({someId : {$regex : "123\\[456\\]"}}) // use "\\" to escape 

有我的方式使用常規蒙戈Ruby驅動程序,而不是使用Mongoid搜索?

回答

2

通常,在Mongoid你可以用正則表達式搜索就像你通常會在您的來電where()字符串即:

Book.where(:title => /^Alice/) # returns all books with titles starting with 'Alice' 

然而,這並不在你的情況下工作,因爲_id場不作爲字符串存儲,而是作爲ObjectID存儲。但是,您可以在模型上添加(和索引)字段,以便爲您提供此功能,您可以在after_create回調中填充該字段。

<shameless_plug>

或者,如果你只是尋找一個較短的解決默認Mongoid的ID,我可以建議類似mongoid_token這使得它很容易縮短令牌/ ID添加到您的Mongoid文件。

</shameless_plug>

+0

我喜歡你的寶石!我打算使用它!我覺得它對我的需求有點矯枉過正,但看起來很棒 – 2012-04-13 02:55:15