1

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

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

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

bc313c1f5053b66121a8a3f4

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

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

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

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

4

1 回答 1

2

通常,在 Mongoid 中,您可以使用正则表达式进行搜索,就像您通常在调用where()ie 时使用字符串一样:

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>

于 2012-04-10T10:12:59.087 回答