2012-04-09 3 views
1

IDの最後の4文字を検索してオブジェクトを検索できるようにします。どうやってやるの?モンゴイドは、IDの一部で検索してオブジェクトを見つけますか?

paramは a3f4ようになり、この場合には、私が見つけることがしたいオブジェクトの実際のIDは次のようになり
Book.where(_id: params[:q]) 

:文字の最後には、私たちです

bc313c1f5053b66121a8a3f4 

お知らせ検索。私はどのように私のオブジェクトidのちょうど "部分"を検索できますか? の全文をのIDで手動で検索する代わりに、

私は正規表現を提供できることを、MongoDBののヘルプドキュメントで見つかった:

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

は私がMongoidを使用して、通常のモンゴルビードライバを使用して検索しないようにするための方法はありますか?

答えて

2

普段where()すなわちへのお電話での文字列になりように通常、Mongoidであなたが正規表現で検索することができます:_idフィールドがあるので

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

しかしこれは、あなたのケースでは動作しません。文字列として格納されず、ObjectIDとして格納されます。ただし、この機能を提供する可能性のあるフィールドをモデルに追加(および索引付け)することができます。after_createコールバックで設定できます。あなただけのデフォルトMongoid IDへの短い解決策を探しているなら

<shameless_plug>

また、私はそれはかなり簡単にMongoid文書に短いトークン/ IDを追加することができmongoid_tokenのようなものを提案することができます。

</shameless_plug>

+0

私はあなたの宝石が好きです!私はそれを使用するつもりです!私は、私が持っているニーズに少し不満を覚えているように感じますが、それは素晴らしいようです –

関連する問題