【问题标题】:Perform custom update with MongoDB .Net (1.10)使用 MongoDB .Net (1.10) 执行自定义更新
【发布时间】: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() 函数接受参数IMongoQueryIMongoUpdate。 我想做的是进行更新,使用BsonDocument 作为查询,BsonDocument 作为更新。

=> Update(BsonDocument value, BsonDocument update);

我想要这个,因为我在使用 BsonSerializer 时遇到了很多问题,这让我很难进行某些复杂的更新。

现在我查看了这两个接口,但它们是空的。因此我无法创建自己的 IMongoQueryIMongoUpdate 实现(因为没有什么可实现的)。

那么,有什么方法可以让我使用 BsonDocuments 调用基本的 MongoDB 函数,而不是强制我使用(不是很好工作的)BsonSerializer 和 ClassMapper 的提供的函数?因为他们惹恼了我。

额外问题:MongoDB .Net 有哪些替代库?我尝试了 2.0,它在我的每个函数中强制使用 async 和泛型,这是不可接受的。而 1.10 甚至不能做(在我看来)最基本的功能(将 BsonDocuments 作为参数传递)

【问题讨论】:

  • 2.0驱动不需要使用async部分,只要在方法末尾使用.Result.Wait强制同步即可。我不确定为什么你对泛型有问题......
  • @RonBeyer 因为我有仅在运行时才知道的类型。这也是我在序列化器上遇到问题的原因

标签: c# .net mongodb


【解决方案1】:

我偶然发现了这些(上帝保佑 IntelliSense)。

有两个类,QueryDocumentUpdateDocument,它们都是简单的扩展BsonDocuments,实现了完全空的接口IMongoQueryIMongoUpdate。它们确实有一些额外的(大部分已弃用)构造函数重载,但没有自己的属性或方法。 还有CommandDocumentIMongoCommand 相同。

因此,通过使用它们,人们可以不受限制地使用任何BsonDocument 进行更新、查询和其他功能。

我真的要为 API 的开发人员鼓掌,因为他们试图向用户隐藏这些内容。他们没有使用Update(BsonDocument value, BsonDocument update); 函数,而是创建了两个空接口并创建了两个扩展类。干得好!

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多