Mongo抛出"元素名称'名称'无效'例外

Ban*_*San 11 .net c# mongodb mongodb-.net-driver

我正在更新一个简单的字段.

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

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

collection.UpdateOne(filterDocument, newDocument);
Run Code Online (Sandbox Code Playgroud)

但是当我到达更新语句时,我得到一个例外 {"Element name 'name' is not valid'."}

这个元素名称有什么问题?

更新

重写它:

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

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

collection.UpdateOne(filterDocument, newDocument);
Run Code Online (Sandbox Code Playgroud)

抛出异常 {"Element name 'y' is not valid'."}

此外,UpdateOne()UpdateMany()没有任何区别.

另外,从外壳来看它很好.

> db.crud.update({name:'alice'},{name:'Alice'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 20

相比之下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 }
Run Code Online (Sandbox Code Playgroud)

......这意味着你的文件可能看起来像;

var newDocument = 
    new BsonDocument { { "$set", new BsonDocument {"name", "Alice" } } };
Run Code Online (Sandbox Code Playgroud)

...或者,如果您真的想要替换整个文档,请使用replaceOne,这应该与您现有的文档一起使用,以替换整个匹配的文档.