2015-09-04 2 views
0

Я использую Mongoid для доступа к базе данных MongoDB, однако я столкнулся с нечетной проблемой. Похоже, что я могу запросить только для записей с помощью find_by как find всегда будет возвращать ноль:Mongoid «find» возвращает нуль, когда «find_by» извлекает запись

invoices = Invoice.find({}) 
p "invoices" 
p invoices 
puts '' 

invoice = Invoice.find_by({ _id: <ObjectId> }) 
p "invoice" 
p invoice 
puts '' 

Второй запрос с использованием find_by будет возвращать одну запись. Согласно the documentation, find должен возвращать каждую запись, которая удовлетворяет запросу.

Есть ли у кого-нибудь идеи, что может быть причиной этого?

ответ

3

Будьте осторожны, чтобы не путать Мопед синтаксис с Mongoid синтаксис. Для Mongoid, Документы описывают метод найти:

Найти документ или несколько документов по их идентификаторам. Повреждает ошибку по умолчанию, если какой-либо из идентификаторов не соответствует

Если вы действительно хотите, чтобы каждая запись, Invoice.all может сделать трюк. (Также будьте осторожны с вашим методом find_by. Синтаксис Mongoid немного отличается от mongo, поэтому вам не нужно иметь завитки вокруг ваших параметров.)

+0

Я не обязательно хочу найти каждую запись, я хочу найдите каждую запись, которая удовлетворяет запросу MongoDB. «Find» не поддерживает запросы за пределами find by _id? –

+0

На самом деле после повторного чтения документов я неправильно понял, как это работает (IE больше действует как 'findById'). Благодаря! –

+1

Если ваш запрос прост, вы можете разбить его на атрибуты, которые нужно пройти, чтобы найти их. Для более сложных запросов вам необходимо прочитать DSL и, вероятно, переключиться на вызов **, где ** в вашей коллекции. [Запросы] (http://mongoid.github.io/en/mongoid/docs/querying.html#queries) – p80n

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