C# 是否有一种方法可以使用C在MongoDB中的集合之间创建联合
我是LINQ和MongoDB的新手。我有一个问题,MongoDB中有多个数据库,其中包含多个集合,所有集合都包含具有相同结构的文档。它们是由客户创建的事务。每个客户机都有自己的数据库,事务根据完成的月份进行存储。交易记录可能会变得巨大,而集合可能会变得非常庞大。当试图跨多个数据库和多个集合绘制这些事务的一致列表,同时能够对一次绘制的数据量使用跳过和限制时,就会出现问题。然后为了让它更有趣,还可以按日期排序。。。 事务的结构如下所示C# 是否有一种方法可以使用C在MongoDB中的集合之间创建联合,c#,mongodb,C#,Mongodb,我是LINQ和MongoDB的新手。我有一个问题,MongoDB中有多个数据库,其中包含多个集合,所有集合都包含具有相同结构的文档。它们是由客户创建的事务。每个客户机都有自己的数据库,事务根据完成的月份进行存储。交易记录可能会变得巨大,而集合可能会变得非常庞大。当试图跨多个数据库和多个集合绘制这些事务的一致列表,同时能够对一次绘制的数据量使用跳过和限制时,就会出现问题。然后为了让它更有趣,还可以按日期排序。。。 事务的结构如下所示 { "_id" : 57, "date" : "Fri
{
"_id" : 57,
"date" : "Fri Apr 26 2019 18:51:22 GMT+0200 (UTC)",
"userId" : 12,
"companyId" : 78,
"MetaData" : "Large Meta Data",
}
First Back 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... Next Last
在搜索交易时,用户可以选择日期限制,然后系统将一次显示20、50、100或200条记录,并能够移动到下一组或跳到特定页码。换句话说,像这样的事情
{
"_id" : 57,
"date" : "Fri Apr 26 2019 18:51:22 GMT+0200 (UTC)",
"userId" : 12,
"companyId" : 78,
"MetaData" : "Large Meta Data",
}
First Back 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... Next Last
我已经创建了一个算法,它可以通过检查将从中提取数据的每个集合的大小,根据每个页面的限制来计算要跳到哪些记录。但是,这仅在为一个客户机提取数据时有效。我现在也必须这样做,并在特定的时间范围内组合来自多个客户机的数据
我希望能够从SQL中创建类似于联合的东西,在这里我可以组合多个集合并将它们视为一个集合,同时对它们运行额外的过滤器。
我试过使用LINQ
MongoClient cnDb = GetMongoClient();
IMongoDatabase db1 = cnDb.GetDatabase("Client1");
IMongoDatabase db2 = cnDb.GetDatabase("Client2");
var col1 = db1.GetCollection<ClientTrans>("Transactions-201904");
var col2 = db2.GetCollection<ClientTrans>("Transactions-201904");
var query = (from trans1 in col1.AsQueryable<ClientTrans>() select trans1).Union(from trans2 in col2.AsQueryable<ClientTrans>() select trans2);
foreach(ClientTrans trans in query)
{
}
这就产生了一个非常有用的错误
表达式树中不支持方法联合:
聚合[]。选择Trans1=>
trans1.Unionaggregate[]选择trans2=>trans2
任何帮助或见解都将不胜感激