Hata: güncelleme işlemi belgesi, updateOne çalıştırılırken atomik operatörler içermelidir


87

Koleksiyonumda sadece bir belge var.

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

updateOneBelgeyi başka bir belgeyle değiştirmek için çalıştırmak istiyorum . Ama neden var 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

Yukarıdaki komuttaki ikinci ve üçüncü argümanlar, The Definitive Guide to MongoDB'deki bir örnekten gelmektedir : Big Data ile başa çıkmak için eksiksiz bir rehber ... Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins

MongoDB'm 3.2.

Yanıtlar:


125

İkinci parametre için yanlış sözdizimi. Lütfen belgeleri kontrol edin . Olmalı:

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

"Sadece güncelleme yapmıyorum" kısmıyla biraz kafam karıştı. Güncelleme işlevinden başka ne bekliyorsunuz ?
Alex Blex

3
Belgeyi "değiştir" mi demek istiyorsun? O halde @ dyouberg'in tavsiyelerine uymalı ve doğru işlevi kullanmalısınız.
Alex Blex

31

Bunun, kullanıcının bir belgenin tamamını yanlışlıkla geçersiz kılmasını önlemek için bir önlem olarak ve updateOne()yönteme ek olarak update()ve bir updateMany()şekilde bir önlem olarak kullanılmasının bir yan etkisi olarak değiştirildiğine inanıyorum .

Bunun replaceOne()yerine yöntemi veya update()belirtmeden kullanabilirsiniz multi:true.


22

Bu kodu kullanmalısınız çünkü ben de aynı problemle karşı karşıyaydım ve sonra bu kodu kullandım:

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

ve ayrıca tanımlamalısınız, ObjectIDaksi takdirde sorun tekrar ortaya çıkacaktır.

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

0

Sen de benimle aynı hatayı yaptın. Dokümanları inceledikten sonra sözdiziminin yanlış olduğunu fark ettim. Deneyin:

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

6
Sözdizimi farkı nedir?
baruchiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.