2010-12-07 14 views
5

मेरे पास 1000 उपयोगकर्ता हैं जो मैं ट्विटर से पुनर्प्राप्त कर रहा हूं, और मैं उन्हें एक शॉट में सहेजना चाहता हूं, क्योंकि व्यक्तिगत रूप से 1000 प्रविष्टियां करने के विरोध में।Mongoid: एक ही कॉल के साथ कई ऑब्जेक्ट्स बनाना

मैं इसे Mongoid पर कैसे कर सकता हूं? ऐसा कुछ रॉक होगा:

TwitterUser.createMany([{:name=>u1}, {:name=>u2},{:name=>u3}]) 
+0

बस सोच रहा है, आपको यह "एक शॉट में" क्यों करना है? –

+0

यह एक उपयोगकर्ता का सामना करने वाला सुविधा है। जब मैं ऐसा करता हूं तो उपयोगकर्ता इंतजार कर रहा होगा;) मैं टिंक करता हूं कि मैं ट्विटर भाग को तेजी से काम करने के लिए पर्याप्त डेटा कैश कर सकता हूं –

उत्तर

7

आपको ऐसा करने के लिए मोंगो रूबी ड्राइवर का उपयोग करना चाहिए। एक साथ कई दस्तावेज़ बनाने के लिए आप insert method पर हैंश की एक सरणी पास कर सकते हैं (इस google groups discussion पर अधिक जानकारी)। Mongoid रूबी ड्राइवर का उपयोग करना आसान बनाता है।

कोड कुछ इस तरह दिखेगा:

user_list = twitter_accounts.map do |account| 
    # create a hash of all the fields to be stored in each document 
    { 'name' => account.name, 
    'username' => account.username 
    # some other fields... 
    } 
end 

Mongoid.master['twitter_users'].insert(user_list) 
+0

यह उत्तर देता है। धन्यवाद! –

+0

कूल। मोंगो रूबी ड्राइवर बहुत ठंडा है और मोंगोइड इसे एक्सेस करना बहुत आसान बनाता है। रूबी ड्राइवर और कच्चे मोंगोडीबी प्रश्नों का उपयोग करने से डरो मत। – bowsersenior

+0

हां, योग्यता के उस स्तर तक पहुंचने की कोशिश कर रहा है। जैसा कि किसी भी नए तकनीक के साथ, शुरुआत में काफी हद तक हैंडहोल्डिंग की जरूरत है –

0

बस MongoidModel.create सीधे का उपयोग करें।

1

आपको लगभग यह मिला है, यह create है, createMany नहीं। आप इसे इस तरह का उपयोग कर सकते हैं:

TwitterUser.create([ 
    { username: "u1", display_name: "Display Name 1" }, 
    { username: "u2", display_name: "Display Name 2" }, 
    { username: "u3", display_name: "Display Name 3" } 
]) 

इसके अलावा, जैसा @bowsersenior बताते हैं, यह Array#Map के साथ उपयोग करने के लिए एक अच्छा विचार है:

TwitterUser.create(
    @users_array.map do |u| 
     { username: u.username, display_name: u.name } 
    end 
) 

Mongoid#Persistence डॉक्स से:

Model.create

डेटाबेस

Model.create!

एक दस्तावेज़ या डेटाबेस में एक से अधिक दस्तावेज़ डालें में एक दस्तावेज़ या एक से अधिक दस्तावेज़ डालें, एक सत्यापन त्रुटि तब होती है यदि कोई त्रुटि को ऊपर उठाने।

संबंधित मुद्दे