[英]C# Mongodb Deserialize List of BsonDocument types to List of Class Types
[英]How to convert List<BsonDocument> to List<Class> in C#
在这里我想做的是将Bson Document列表转换为Class列表。 这样做的主要目的是从Json数据列表中过滤数据。 我将MongoDb用于数据库,将C#用于处理数据。 我已经在MongoDb中存储了一些数据,并尝试使用FilterDefinition
过滤数据,如下所示:
程序1
FileContext context = new FileContext();
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
var builder = Builders<BsonDocument>.Filter;
FilterDefinition<BsonDocument> Filter = builder.Eq("FileName", fileDetail.FileName) & builder.Eq("FileNumber", fileDetail.FileNumber.ToString());
var list = await collection.Find(Filter).ToListAsync();
这样,我无法获取列表中的数据。 因此,我尝试了另一种这样的方法:
程序2
FileContext context = new FileContext();
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
var list = await collection.Find(_ => true).ToListAsync();
List<MyClass> objList = null;
foreach (var item in objList)
{
objList = new List<MyClass>();
objList.Add(BsonSerializer.Deserialize<MyClass>(item));
}
if(objList.Count >0)
{
int count = objList.Where(x => x.FileName == "SOME_FILE_NAME" && x.FileNumber == 1).Count();
}
这样,我既可以获取数据,也可以过滤数据,但是我知道这根本不是一个好的编程方法,因为如果将来数据量增加,这将需要大量的waiting time
。
我的问题是:
PROCESS 1
什么问题? List<BsonDocument>
转换为List<MyClass>
? List<BsonDocument>
? var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
应该:
var collection = context.Db.GetCollection<MyClass>("DBCollection");
这样,您应该能够使用Find方法使用类似以下方法来检查您的FileName和FileNumber:
var objList = await collection.Find(x => x.FileName == "FILENAMEHERE" && x.FileNumber == 1).ToListAsync();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.