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


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.