Mongoid में, मानदंड क्वेरी का प्रतिनिधित्व करता है, तत्व नहीं। आप फ़िल्टर, एक दायरा, एक क्वेरी ऑब्जेक्ट के रूप में मानदंड के बारे में सोच सकते हैं।
एक बार आपके पास मानदंड (गुंजाइश) हो जाने के बाद, आप तत्वों को प्राप्त कर सकते हैं, डेटाबेस पर वास्तविक क्वेरी निष्पादित कर सकते हैं, तत्वों पर पुनरावृत्ति करने या एक तत्व लौटने के लिए, उदाहरण के लिए: .first
, .last
, .to_a
, .each
, .map
, आदि
यह अधिक कुशल है और आपको अन्य सरल लोगों से जटिल "क्वेरी" लिखने की अनुमति देता है।
उदाहरण के लिए, यदि आप अपने वर्ग में कुछ नामित स्कोप बना सकते हैं:
class User
include Mongoid::Document
field :name, type: String
field :age, type: Integer
field :admin, type: Boolean
scope :admins, where(admin: true) # filter users that are admins
scope :with_name, (name)-> { where(name: name) } # filter users with that name
end
तो फिर तुम कुछ मानदंड बना सकते हैं वस्तुओं:
admins = User.admins
johns = User.with_name('John')
admin_johns = User.admins.with_name('John') # composition of criterias, is like doing ANDs
young = User.where(:age.lt => 25) # the Mongoid method .where also returns a criteria
इस बिंदु तक, आप आग नहीं था मोंगो डेटाबेस में कोई प्रश्न, आप बस प्रश्न पूछ रहे थे।
किसी भी समय, आप criterias चेनिंग, आगे भी क्वेरी को परिशोधित करने रख सकते हैं:
young_admins = admins.merge(young)
old_admins = admins.where(age.gt => 60)
और अंत में, तत्वों के साथ सरणी मिल:
# Execute the query and an array from the criteria
User.all.to_a
User.admins.to_a
admins.to_a
young_admins.to_a
# Execute the query but only return one element
User.first
admins.first
johns.last
# Execute the query and iterate over the returned elements
User.each{|user| ... }
User.admins.each{|admin_user| ... }
johns.map{|john_user| ... }
तो, कुछ नामित परिभाषित कक्षा में स्कॉप्स, फिर उन्हें मानदंड बनाने के लिए उपयोग करें, और जब आपको इसकी आवश्यकता हो तो असली क्वेरी करें (आलसी लोडिंग)। मानदंड आपके लिए यह सब संभालते हैं भले ही आपको पता न हो कि आपको इसकी आवश्यकता है।
तो 'ActiveRecord में all' एक सरणी देता है का उपयोग करें। आप सरणी प्राप्त करने के लिए 'execute' को कॉल करना चाहते हैं। 'User.where (project_id: 2) .execute' – Travis