2016-02-16 3 views
6

Я обновляю простое поле.Монго метание «„имя“Имя элемента не является действительным» исключением

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

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

collection.UpdateOne(filterDocument, newDocument); 

Но когда я достигаю заявление об обновлении для меня исключение {"Element name 'name' is not valid'."}

Что случилось ? с этим именем элемента

Update

Переписывание его следующим образом:

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

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

collection.UpdateOne(filterDocument, newDocument); 

Бросок за исключением {"Element name 'y' is not valid'."}

Кроме того, UpdateOne() или UpdateMany() нет никакой разницы.

Кроме того, из оболочки это нормально.

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

Странно ... Является ли «недопустимое имя» с 'filterDocument' или' newDocument'? – AustinWBryan

+0

Хороший вопрос! Появляется «новый документ». Я просто изменил его на 'x' и получил то же исключение, но вместо этого вместо' x'. – BanksySan

+0

Хм .. Я собирался сказать, может быть, потому, что он получает «имя», «смешивается с каким-то термином, но не думаю ... Попробуйте изменить имя« filterDocument »на« y », а затем попробуйте изменить его значение «Алиса» ' – AustinWBryan

ответ

11

В отличие от update, updateOne, кажется, требует оператора обновления;

> 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 } 

... что означает, что ваш документ должен быть похож;

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

... или если вы на самом деле означает заменить весь документ, используйте replaceOne, который должен работать с существующими документами, чтобы заменить весь соответствующий документ.

+0

Я задавался вопросом, было ли это что-то в этом роде. Замените редактирование v. Я отдам! – BanksySan

+0

классный .. спасибо: (y) –