我可以从 C# .Net 驱动程序中多个文档中存在的数组中提取多个元素吗

Posted

技术标签:

【中文标题】我可以从 C# .Net 驱动程序中多个文档中存在的数组中提取多个元素吗【英文标题】:Can I pull multiple elements from arrays that exist in multiple documents in C# .Net Driver 【发布时间】:2021-11-22 23:14:40 【问题描述】:

我有这段代码从“fruits”数组中提取多个元素,并为数据库中的所有“商店”执行此操作:

db.stores.update(
 ,
      $pull:  fruits:  $in: [ "apples", "bananas" ]   ,
  multi: true 
)

如何使用 .Net 驱动程序将其转换为 C# 代码? 应该从命名空间 MongoDB.Driver IMongoCollection 中使用 UpdateManyAsync 方法,但我不知道如何进行特定的过滤。

【问题讨论】:

mongo驱动允许字符串和大部分参数之间的隐式转换,所以你可以把字符串 $pull: fruits: $in: [ "apples", "bananas" ] 放到合适的UpdateManyAsync参数中 【参考方案1】:

Mongo .NET 驱动程序支持使用untyped document (BsonDocument) 编写脚本。

UpdateMany

更新很多文档,相当于 multi: true

你可以实现如下:

MongoClient _client = new MongoClient("mongo connection string");

IMongoDatabase _database = _client.GetDatabase("your DB");
IMongoCollection<Store> _collection = _database.GetCollection<Store>("store");

string[] removedFruits = new string[]  "apples", "bananas" ;
FilterDefinition<Store> filter = Builders<Store>.Filter.Empty;

UpdateDefinition<Store> update =
    new BsonDocument("$pull",
        new BsonDocument("fruits",
            new BsonDocument("$in", BsonArray.Create(removedFruits))
        )
    );

_collection.UpdateMany(filter, update);
public class Store

    public string[] Fruits  get; set; 

    // Other properties

【讨论】:

这个解决方案解决了问题,非常感谢:)

以上是关于我可以从 C# .Net 驱动程序中多个文档中存在的数组中提取多个元素吗的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 C# 中使用单独的线程从 Windows 应用程序打印吗?

在 ASP.NET C# Web 应用程序中使用 ADO.NET 和 XML

在 c# .Net 3.5 中,如何控制多个 WaitHandles?

C#/VB.NET 合并PDF页面

如何在 .Net 中创建 ODS 文档

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?