2012-03-09 4 views
5

मोंगोइड का उपयोग करना, क्या किसी निश्चित मानदंड से मेल खाने वाली सभी प्रविष्टियों के लिए एक सरणी फ़ील्ड पर मान को धक्का देने के लिए "update_all" का उपयोग करना संभव है?Mongoid के साथ, क्या मैं एक बार में कई प्रविष्टियों के लिए एक सरणी फ़ील्ड पर एक मूल्य को धक्का देने के लिए "update_all" कर सकता हूं?

उदाहरण:

class Foo 
    field :username 
    field :bar, :type => Array 

    def update_all_bars 
    array_of_names = ['foo','bar','baz'] 
    Foo.any_in(username: foo).each do |f| 
     f.push(:bar,'my_new_val') 
    end 
    end 
end 

वहाँ एक ही बार में (प्रत्येक मिलान प्रवेश के लिए "foo" क्षेत्र पर मान 'my_new_val' पुश करने के लिए) सभी उपयोगकर्ताओं को अद्यतन करने का उपयोग कर एक तरीका है मैं सोच रहा हूँ "update_all "(या कुछ समान) एक समय में उन्हें अद्यतन करने के लिए उनके माध्यम से लूपिंग के बजाय। मैंने सब कुछ करने की कोशिश की है जिसे मैं सोच सकता हूं और अब तक कोई भाग्य नहीं है।

धन्यवाद

उत्तर

5

आप फोन है कि मोंगो डीबी ड्राइवर से की जरूरत है। आप कर सकते हैं:

Foo.collection.update( 
    Foo.any_in(username:foo).selector, 
    {'$push' => {bar: 'my_new_val'}}, 
    {:multi => true} 
) 

या

Foo.collection.update( 
    {'$in' => {username: foo}}, 
    {'$push' => {bar: 'my_new_val'}}, 
    {:multi => true} 
) 

आप एक pull_request या एक सुविधा का अनुरोध कर सकते हैं अगर आप चाहते हैं कि Mongoid निर्मित में।

+0

सिर्फ उत्तर लिख रहा था, वहां एक तीसरा पैरामीटर 'बहु: सत्य' – rubish

+0

भी सही होना चाहिए। मैं अपना उत्तर – shingara

+0

शानदार अद्यतन करता हूं! बहुत बहुत धन्यवाद! – orderedchaos

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

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