我希望能够通过搜索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?
答案 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>