2015-09-04 35 views
0

我使用Mongoid來訪問MongoDB數據庫,但是我遇到了一個奇怪的問題。好像我只能查詢使用find_by記載,find總是返回零:Mongoid「find」返回nil,當「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

小心不要混淆Moped語法與Mongoid語法。對於Mongoid,該文檔描述找到方法:

查找其ID的文檔或多個文檔。如果任何一個ID不匹配,默認會引發一個錯誤

如果你真的想要每一條記錄,Invoice.all都可以做到。 (還要注意你的find_by方法,Mongoid的語法與mongo的有些不同,所以你不必在你的params中有curlies。)

+0

我不一定想找到每條記錄,我想找到滿足MongoDB查詢的每條記錄。 'find'不支持_id之外的查詢嗎? –

+0

事實上,在重新閱讀文檔後,我誤解了它是如何工作的(IE更像'findById')。謝謝! –

+1

如果您的查詢很簡單,您可以將其分解爲要傳遞給的屬性。對於更復雜的查詢,您需要閱讀DSL,並可能切換到在您的收藏集**處調用**。 [查詢](http://mongoid.github.io/en/mongoid/docs/querying.html#queries) – p80n