2012-04-09 2 views
1

Я хочу, чтобы иметь возможность искать мои объекты, ища последние 4 символа идентификатора. Как я могу это сделать?Mongoid, найти объект, выполнив поиск по части идентификатора?

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

Если пары будут чем-то вроде a3f4, и в этом случае фактического идентификатора для объекта, который я хочу найти бы:

bc313c1f5053b66121a8a3f4 

Обратите внимание последнее для персонажей, что мы искали. Как я могу найти только «часть» моего идентификатора объектов? вместо поиска пользователя вручную, набрав всего id?

я нашел в справке документы MongoDB, в том, что я могу обеспечить регулярное выражение:

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

Есть ли способ для меня, чтобы найти с помощью регулярного драйвера Монго рубин, а не с помощью Mongoid?

ответ

2

Обычно в Mongoid вы можете искать с регулярным выражением, как вы это обычно со строкой в ​​вашем вызове where() т.е.

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

Однако это не работает в вашем случае, поскольку _id поле не хранится как строка, а как ObjectID. Однако вы можете добавить (и индексировать) поле на своих моделях, которое может предоставить вам эту функцию, которую вы можете заполнить в обратном вызове after_create.

<shameless_plug>

В качестве альтернативы, если вы просто ищете более короткое решение по умолчанию Mongoid идентификаторов, я мог бы предложить что-то вроде mongoid_token, что делает его очень легко добавлять короткие токены/идентификаторы для вашего Mongoid документов.

</shameless_plug>

+0

Мне нравится ваш драгоценный камень! Я собираюсь использовать его! Я чувствую, что он немного перегружен для моих потребностей, но он выглядит потрясающе –

Смежные вопросы