MongoDB BsonDocument到DataTable,反之亦然

本文关键字:反之亦然 DataTable BsonDocument MongoDB | 更新日期: 2023-09-27 18:15:10

出于某种原因,我想存储一个ADO。. NET DataTableBsonDocument中,但是我很惊讶官方的c#驱动程序(2.0)拒绝将DataTable序列化为BsonDocument的数组。我知道编写自己的方法很容易做到这一点,但这可以以相当通用的方式完成。此外,相反的方向是相当直接的(然而,由于MongoDB是无模式的,它可以生成大量的NULL)。

是我在默认驱动程序中遗漏了允许这种序列化的东西,还是我必须编写一些无聊的样板代码(当然,我以后可以重用这些代码)?

MongoDB BsonDocument到DataTable,反之亦然

你可以试试这样

public async Task SaveDataTableToCollection(DataTable dt)
      {
          var connectionString = ConfigurationManager.AppSettings["mongoConnection"];
          var client = new MongoClient(connectionString);
          var database = client.GetDatabase("myMongoDatabaseName");
          var collection = database.GetCollection<BsonDocument>("MyCollection");
          List<BsonDocument> batch = new List<BsonDocument>();
          foreach (DataRow dr in dt.Rows)
          {
              var dictionary = dr.Table.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => dr[col.ColumnName]);
              batch.Add(new BsonDocument(dictionary));
          }
          await collection.InsertManyAsync(batch.AsEnumerable());
      }