Mongoid,通过搜索Id的一部分来查找对象?

时间:2012-04-09 23:34:13

标签: mongodb mongoid

我希望能够通过搜索id的最后4个字符来搜索我的对象。我怎么能这样做?

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

param类似于a3f4,在这种情况下,我想要找到的对象的实际id是:

bc313c1f5053b66121a8a3f4

注意字符的最后一个是我们搜索的内容。如何搜索我的对象id的“部分”?而不是通过输入整个 ID来手动搜索我的用户?

我在MongoDB的帮助文档中发现,我可以提供一个正则表达式:

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

我有没有办法使用常规的mongo ruby​​驱动程序进行搜索而不使用Mongoid?

1 个答案:

答案 0 :(得分: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这样的东西,这样可以很容易地为您的Mongoid文档添加更短的标记/ ID。

</shameless_plug>