Błąd: dokument operacji aktualizacji musi zawierać niepodzielne operatory podczas uruchamiania updateOne


87

W mojej kolekcji jest tylko jeden dokument.

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

Chcę pobiec, updateOneaby zastąpić dokument innym. Ale dlaczego tam jest 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

Drugi i trzeci argument w powyższym poleceniu pochodzi z przykładu w The Definitive Guide to MongoDB: Kompletny przewodnik po Big Data ... Autor: Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins

Moja MongoDB to 3.2.

Odpowiedzi:


125

Błędna składnia drugiego parametru. Sprawdź dokumenty . Powinno być:

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

Jestem trochę zdziwiony częścią „Nie tylko aktualizuję”. Czego jeszcze oczekujesz od funkcji aktualizacji ?
Alex Blex

3
Masz na myśli „wymienić” dokument? Następnie należy postępować zgodnie z radą @ dyouberg i używać odpowiedniej funkcji.
Alex Blex

31

Uważam, że zostało to zmienione jako efekt uboczny wprowadzenia tej updateOne()metody oprócz update()i updateMany()jako pewnego rodzaju zabezpieczenie przed przypadkowym zastąpieniem całego dokumentu przez użytkownika.

Możesz replaceOne()zamiast tego użyć metody lub update()bez określania multi:true.


22

Powinieneś użyć tego kodu, ponieważ ja też miałem ten sam problem, a potem użyłem tego kodu:

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

i należy również zdefiniować, w ObjectIDprzeciwnym razie problem wystąpi ponownie.

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

0

Zrobiłeś ten sam błąd co ja. Po przejrzeniu dokumentów zdałem sobie sprawę, że składnia jest nieprawidłowa. Próbować:

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

6
Jaka jest różnica w składni?
baruchiro
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.