出于某种原因,我想将一个ADO.NET DataTable
存储在BsonDocument
中,但我很惊讶官方C#驱动程序(2.0)拒绝将DataTable
序列化为BsonDocument
的数组。我知道编写自己的方法是相当容易的,但这可以通过非常通用的方式完成。另外,相反的方向非常简单(但是由于MongoDB是无模式的,因此它可以生成大量的NULL
)。
我是否在默认驱动程序中遗漏了允许这种序列化的内容,或者我必须编写一些无聊的样板代码(当然,我可以稍后再使用)?
答案 0 :(得分:1)
您可以尝试这样的事情
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());
}