MongoDB: प्रत्येक दस्तावेज़ को एक फ़ील्ड पर अपडेट करें


214

मेरा एक संग्रह है जिसका नाम fooकाल्पनिक है।

प्रत्येक उदाहरण में foolastLookedAt नामक एक क्षेत्र होता है जो कि युग के बाद से UNIX टाइमस्टैम्प है। मैं MongoDB क्लाइंट के माध्यम से जाने में सक्षम होना चाहता हूं और उस टाइमस्टैम्प को सभी मौजूदा दस्तावेजों (उनमें से लगभग 20,000) को वर्तमान टाइमस्टैम्प में सेट करना चाहता हूं।

इससे निपटने का सबसे अच्छा तरीका क्या है?


जवाबों:


458

संस्करण के बावजूद, आपके उदाहरण के लिए, यह <update>है:

{  $set: { lastLookedAt: Date.now() / 1000 }  }

हालाँकि, MongoDB के आपके संस्करण के आधार पर, क्वेरी अलग दिखाई देगी। संस्करण के बावजूद, कुंजी यह है कि खाली स्थिति {}किसी भी दस्तावेज़ से मेल खाएगी । Mongo शेल में, या किसी MongoDB ग्राहक के साथ:

$ संस्करण> = 3.2 :

db.foo.updateMany( {}, <update> )
  • {} हालत है (खाली स्थिति किसी भी दस्तावेज़ से मेल खाती है)

3.2> $ संस्करण> = 2.2 :

db.foo.update( {}, <update>, { multi: true } )
  • {} हालत है (खाली स्थिति किसी भी दस्तावेज़ से मेल खाती है)
  • {multi: true} "कई दस्तावेज़ अद्यतन करें" विकल्प है

$ संस्करण <2.2 :

db.foo.update( {}, <update>, false, true )
  • {} हालत है (खाली स्थिति किसी भी दस्तावेज़ से मेल खाती है)
  • false" मुखर " पैरामीटर के लिए है
  • true "मल्टी" पैरामीटर के लिए है (कई रिकॉर्ड अपडेट करें)

Date.now () टाइमस्टैम्प भी लौटाता है। देखें developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
फिलिप प्लेनटियर

यह अभी भी मुझे दे रहा है कि फू के इन सभी उदाहरणों के लिए सही नहीं है। यह चलाने के बाद कि मैं एक db.foo.findOne () और lastLookedAt है: 1327691719186, जो jruby-1.6.5: 011> Time.at (1327691719186) => Sun Nov 16 02:19:46 -0500 44042
randombits

1
मेरा बुरा, POSIX समय सेकंड का उपयोग करता है, जबकि जावास्क्रिप्ट समय मिलीसेकंड का उपयोग करता है। Date.now () / 1000 काम करना चाहिए, हालांकि। आपको इसे गोल करना पड़ सकता है।
फिलिप प्लांटियर

psh यह है कि खाली {} जिसने मेरे लिए किया, धन्यवाद फिल
जोना

1
ओल्डवेल्यू + "कुछ स्ट्रिंग" के लिए यह कैसे करें
महेश के

11

यह कोड आपके लिए मददगार होगा

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "abc@gmail.com",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  

4

मैं एक महीने से थोड़े समय के लिए MongoDB .NET ड्राइवर का उपयोग कर रहा हूं। अगर मैं इसे .NET ड्राइवर का उपयोग करते हुए करता, तो मैं संग्रह ऑब्जेक्ट पर अपडेट विधि का उपयोग करता। सबसे पहले, मैं एक क्वेरी का निर्माण करूँगा, जो मुझे उन सभी दस्तावेज़ों को मिल जाएगी जिनकी मुझे दिलचस्पी है और उन फ़ील्ड्स पर एक अपडेट करें जिन्हें मैं बदलना चाहता हूं। मोंगो में अपडेट केवल पहले दस्तावेज़ को प्रभावित करता है और क्वेरी से उत्पन्न सभी दस्तावेजों को अपडेट करने के लिए 'मल्टी' अपडेट फ्लैग का उपयोग करने की आवश्यकता होती है। नमूना कोड निम्नानुसार है ...

var collection = db.GetCollection("Foo");
var query = Query.GTE("No", 1); // need to construct in such a way that it will give all 20K //docs.
var update = Update.Set("timestamp", datetime.UtcNow);
collection.Update(query, update, UpdateFlags.Multi);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.