2016-02-16 38 views
6

mam aktualizację prosty pole.Mongo rzucanie „Nazwa elementu«nazwa»nie jest prawidłowy” wyjątek

var filterDocument = new BsonDocument { { "name", "alice" } }; 

var newDocument = new BsonDocument { { "name", "Alice" } }; 

collection.UpdateOne(filterDocument, newDocument); 

Ale kiedy sięgam oświadczenie aktualizację uzyskać wyjątek {"Element name 'name' is not valid'."}

co jest nie tak ? o tej nazwie elementu

Aktualizacja

Ponowne pisanie go do tego:

var filterDocument = new BsonDocument { { "x", "alice" } }; 

var newDocument = new BsonDocument { { "y", "Alice" } }; 

collection.UpdateOne(filterDocument, newDocument); 

wyjątek dalej {"Element name 'y' is not valid'."}

Również UpdateOne() lub UpdateMany() nie ma znaczenia.

Również z powłoki jest w porządku.

> db.crud.update({name:'alice'},{name:'Alice'}) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 
+0

Dziwne ... Czy "nieprawidłowa nazwa" to "filterDocument" lub "newDocument"? – AustinWBryan

+0

Dobra uwaga! Wydaje się być "nowym dokumentem". Właśnie zmieniłem go na 'x' i otrzymałem ten sam wyjątek, ale zamiast tego użyłem' x'. – BanksySan

+0

Hm ... Chciałem powiedzieć, może to dlatego, że dostaje '" name "' pomieszane z jakimś określeniem, ale nie zgaduj ... Spróbuj zmienić nazwę 'filterDocument' na' "y" ', a następnie spróbuj zmienić jej wartość do '" Alice "' – AustinWBryan

Odpowiedz

11

W przeciwieństwie do update, updateOne wydaje się wymagać od operatora aktualizacji;

> db.test.updateOne({name:'alice'},{name:'Alice'}) 
2016-02-16T19:04:07.689+0000 E QUERY [thread1] Error: the update operation document must contain atomic operators 

> db.test.updateOne({name:'alice'},{$set: {name:'Alice'}}) 
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } 

... co oznacza, że ​​Twój dokument prawdopodobnie powinien wyglądać;

var newDocument = 
    new BsonDocument { { "$set", new BsonDocument {"name", "Alice" } } }; 

... lub jeśli naprawdę myśli, aby zastąpić cały dokument, użyj replaceOne, który powinien pracować z istniejących dokumentów, aby zastąpić cały dokument dopasowanie.

+0

Zastanawiałem się, czy to coś takiego. Wymień edytowanie v. Dam ci szansę! – BanksySan

+0

fajne .. dzięki: (y) –