त्रुटि: अद्यतन ऑपरेशन दस्तावेज़ में परमाणु संचालक होना चाहिए, जब अद्यतन चालू हो


87

मेरे संग्रह में, केवल एक दस्तावेज है।

> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100 

मैं updateOneदस्तावेज़ को किसी अन्य के साथ बदलने के लिए चलाना चाहता हूं । लेकिन वहाँ क्यों है Error: the update operation document must contain atomic operators?

> db.c20160712.updateOne( { "Attribute" : "good"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )
2016-08-10T16:37:57.089-0400 E QUERY    [thread1] Error: the update operation document must contain atomic operators :
DBCollection.prototype.updateOne@src/mongo/shell/crud_api.js:493:1
@(shell):1:1

उपरोक्त कमांड में दूसरा और तीसरा तर्क द डेफिनिटिव गाइड टू मोंगोबीडी में एक उदाहरण से आता है : बिग डेटा से निपटने के लिए एक पूर्ण मार्गदर्शिका ... इलको प्लग, डेविड हॉव्स, पीटर मेम्ब्रे, टिम हॉकिन्स

मेरा MongoDB 3.2 है।

जवाबों:


125

दूसरे पैरामीटर के लिए गलत सिंटैक्स। कृपया डॉक्स की जांच करें । यह होना चाहिए:

db.c20160712.updateOne(
    { "Attribute" : "good" }, 
    { $set: {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action" } },
    { upsert: true }
);

मैं "मैं बस अपडेट नहीं करता" भाग के साथ थोड़ा हैरान हूँ। अपडेट फ़ंक्शन से आपको और क्या उम्मीद है ?
— एलेक्स बैलेक्स

3
आप दस्तावेज़ को "प्रतिस्थापित" करते हैं? फिर आपको @ डाइगबर्ग की सलाह का पालन करना चाहिए और सही फ़ंक्शन का उपयोग करना चाहिए।
— एलेक्स बैलेक्स

30

मेरा मानना ​​है कि उपयोगकर्ता को गलती से पूरे दस्तावेज को ओवरराइड करने से रोकने के लिए updateOne()इसके अलावा update()और updateMany()कुछ हद तक सुरक्षा कवच के रूप में पेश किया गया था ।

आप replaceOne()इसके बजाय विधि का उपयोग कर सकते हैं , या update()बिना निर्दिष्ट किए multi:true।


22

आपको इस कोड का उपयोग करना चाहिए क्योंकि मैं भी इसी समस्या का सामना कर रहा था और फिर मैंने इस कोड का उपयोग किया:

updateOne(
    { _id: new ObjectID(req.params.id) },
    { $set: { title: req.body.bookName, author: req.body.authorName } },
    { upsert: true }
)

और आपको भी परिभाषित करना चाहिए ObjectIDअन्यथा समस्या फिर से होगी।

const ObjectID = require('mongodb').ObjectID;

0

तुमने वही किया जो मैंने किया था। डॉक्स से गुजरने पर मुझे महसूस हुआ कि वाक्य रचना गलत है। प्रयत्न:

db.c20160712.updateOne( 
   { "Attribute" : "good"}, 
   {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, 
   { upsert: true} 
)

6
वाक्यविन्यास अंतर क्या है?
— बरूचिरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.