我有几个对象列表
List<ObjectClass1> ObjectList1;
List<ObjectClass2> ObjectList2;
Run Code Online (Sandbox Code Playgroud)
我想在测试运行结束时将所有对象作为 JSON 写入 Mongo。最快的方法是什么?我目前正在这样做:
IMongoClient client = new MongoClient();
IMongoDatabase db = client.GetDatabase("MyDB");
db.CreateCollection("ObjectList1");
var ObjectList1Collection = db.GetCollection<BsonDocument>("ObjectList1");
foreach(ObjectClass1 obj in ObjectList1)
{
var document = BsonSerializer.Deserialize<BsonDocument>(MyJSONSerializer.Serialize(obj));
ObjectList1Collection.InsertOneAsync(document);
}
db.CreateCollection("ObjectList2");
var ObjectList1Collection = db.GetCollection<BsonDocument>("ObjectList2");
foreach(ObjectClass2 obj in ObjectList2)
{
var document = BsonSerializer.Deserialize<BsonDocument>(MyJSONSerializer.Serialize(obj));
ObjectList2Collection.InsertOneAsync(document);
}
Run Code Online (Sandbox Code Playgroud)
我可以建议您从以下代码开始:
IMongoClient client = new MongoClient();
IMongoDatabase db = client.GetDatabase("MyDB");
// create collection calls are not needed, MongoDB will do that for you
// db.CreateCollection("ObjectList1");
var objectList1Collection = db.GetCollection<ObjectClass1>("ObjectList1");
objectList1Collection.InsertMany(ObjectList1);
Run Code Online (Sandbox Code Playgroud)
...第二个对象列表或多或少相同。这将简单地以批量加载方式运行插入,即避免调用 MongoDB 数千次的开销,而是将对象列表分成 1000 个文档的包并将它们发送到 MongoDB。
如果这还不够快,根据您的设置,有多种可能有意义的事情:
InsertMany
上述方法的异步实现,以便您的 CPU 在将大量文档发送到 MongoDB 后,在等待网络/IO 部分时可以继续工作。