我有几个对象列表
List<ObjectClass1> ObjectList1;
List<ObjectClass2> ObjectList2;
我想在测试运行结束时将所有对象作为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);
}
答案 0 :(得分:2)
您无需将其序列化为Json即可调用:
ObjectList1Collection.InsertManyAsync(ObjectList1);
据我所知,这应该是最快的方式。
答案 1 :(得分:2)
我建议您从以下代码开始:
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);
...对于第二个对象列表或多或少相同。这将简单地以批量加载方式运行插入,即避免调用MongoDB数千次的开销,而是将对象列表分成1000个文档的包并将它们发送到MongoDB。
如果这还不够快,根据您的设置,有各种各样的事情可能有意义:
InsertMany
的异步实现
上面提到的方法,所以你的CPU可以继续工作
发送一大块文件后等待网络/ IO部分
关闭MongoDB。