Монго метание "имя элемента" имя "недопустимо" исключение

Я обновляю простое поле.

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

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

collection.UpdateOne(filterDocument, newDocument);

но когда я достигаю оператора обновления, я получаю исключение {"Element name 'name' is not valid'."}

что не так с этим именем элемента?

обновление

переписать его на это:

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

1 ответов


В отличие от 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, который должен работать с вашими существующими документами, чтобы заменить весь соответствующий документ.