【发布时间】:2015-09-17 20:08:27
【问题描述】:
我正在使用带有 C# 的 MongoDB .Net 1.10
我想以与 mongo shell 相同的方式进行自定义更新。
例如,在 shell 中我可以执行以下操作:
db.myCollection.update({Name: "Test"}, {$set:{SomeProperty: "SomeValue"}})
显然我可以在 C# 中使用:
myCollection.Update(Query.EQ("Name","Test"), Update.Set("SomeProperty", "SomeValue"));
Update() 函数接受参数IMongoQuery 和IMongoUpdate。
我想做的是进行更新,使用BsonDocument 作为查询,BsonDocument 作为更新。
=> Update(BsonDocument value, BsonDocument update);
我想要这个,因为我在使用 BsonSerializer 时遇到了很多问题,这让我很难进行某些复杂的更新。
现在我查看了这两个接口,但它们是空的。因此我无法创建自己的 IMongoQuery 和 IMongoUpdate 实现(因为没有什么可实现的)。
那么,有什么方法可以让我使用 BsonDocuments 调用基本的 MongoDB 函数,而不是强制我使用(不是很好工作的)BsonSerializer 和 ClassMapper 的提供的函数?因为他们惹恼了我。
额外问题:MongoDB .Net 有哪些替代库?我尝试了 2.0,它在我的每个函数中强制使用 async 和泛型,这是不可接受的。而 1.10 甚至不能做(在我看来)最基本的功能(将 BsonDocuments 作为参数传递)
【问题讨论】:
-
2.0驱动不需要使用
async部分,只要在方法末尾使用.Result或.Wait强制同步即可。我不确定为什么你对泛型有问题...... -
@RonBeyer 因为我有仅在运行时才知道的类型。这也是我在序列化器上遇到问题的原因