1

IDの最後の4文字を検索して、オブジェクトを検索できるようにしたい。どうやってやるの?

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

paramはのようなものa3f4になります。この場合、検索したいオブジェクトの実際のIDは次のようになります。

bc313c1f5053b66121a8a3f4

最後の文字が検索対象であることに注意してください。オブジェクトIDの「一部」だけを検索するにはどうすればよいですか?ID全体を入力してユーザーに手動で検索させる代わりに?

MongoDBのヘルプドキュメントで、正規表現を提供できることがわかりました。

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

Mongoidを使用せずに通常のmongorubyドライバーを使用して検索する方法はありますか?

4

1 に答える 1

2

通常、Mongoid では、ie への呼び出しで文字列を使用する場合と同じように、正規表現を使用して検索できますwhere()

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

ただし、_idフィールドは文字列ではなく ObjectID として保存されるため、これは機能しません。ただし、モデルにフィールドを追加 (およびインデックス) して、この機能を提供できるようにすることもできます。このフィールドは、after_createコールバックで入力できます。

<shameless_plug>

または、デフォルトの Mongoid ID に対するより短いソリューションを探しているだけなら、mongoid ドキュメントに短いトークン/ID を簡単に追加できるようにするmongoid_tokenのようなものを提案できます。

</shameless_plug>

于 2012-04-10T10:12:59.087 に答える