如何在Ruby on Rails中檢查使用mongoid的文檔是否存在嵌入式文檔?假設我有一個文件user
,它具有name
,email
,並且可能有nicknames
嵌入式文檔。現在,如果我運行user.first.nicknames
,並且該user
中沒有嵌入文檔nicknames
,則會出錯。我試過matches?
和exists?
但他們不工作。如何檢查mongoid中的文檔中是否存在嵌入式文檔?
謝謝!
如何在Ruby on Rails中檢查使用mongoid的文檔是否存在嵌入式文檔?假設我有一個文件user
,它具有name
,email
,並且可能有nicknames
嵌入式文檔。現在,如果我運行user.first.nicknames
,並且該user
中沒有嵌入文檔nicknames
,則會出錯。我試過matches?
和exists?
但他們不工作。如何檢查mongoid中的文檔中是否存在嵌入式文檔?
謝謝!
這應該返回true,如果它不存在User.first.nicknames.nil?
它,如果它存在,這將返回true:User.first.nicknames.present?
你可以做User.where(:nicknames.exists => true).include?(user)
。
User.where(:nicknames.exists => true)
將僅返回包含nicknames
的文檔。
從這裏的其他答案得到一些幫助後,我發現了一些對我有用的東西,我認爲這是原始海報的想法;
Model.where(:"subdoc.some_attribute".exists => true)
這將返回子文檔中存在「some_attribute」的所有文檔。 注意符號的語法,這就是我所缺少的。
您也可以通過關聯:'Model.subdocs.where(:field.exists => true)'。 –
這就是我一整天都在尋找的東西。它沒有記錄在任何地方!? – fre2ak
這些都不適用於沒有'暱稱'的mongoDB文檔。它產生一個「NoMethodError:未定義的方法'暱稱'」錯誤。這對確實有'暱稱'的文檔起作用.. – Goalie
這不是我的,我正在使用MongoId 2.3.3。在我看來,'User.first'實際上是零。所以你試圖在一個零對象上調用'nicknames'。你能證實嗎? – ctcherry