有没有一种方法可以使用C#

时间:2019-04-26 09:53:10

标签: c# mongodb

我对LINQ和MongoDB相当陌生。我有一个问题,在MongoDB中我有多个数据库,其中包含多个集合,所有集合都包含具有相同结构的文档。它们是客户创建的交易。每个客户都有自己的数据库,交易记录是根据交易完成的月份进行存储的。交易记录可能会非常庞大​​,而收款会非常庞大​​。当试图在多个数据库和多个集合之间绘制这些事务的连贯列表,而同时又能够使用一次跳过和限制一次绘制的数据量时,就会出现问题。为了使它更有趣,还可以按日期对其进行排序... 交易的结构看起来像这样

{
  "_id" : 57,
  "date" : "Fri Apr 26 2019 18:51:22 GMT+0200 (UTC)", 
  "userId" : 12,
  "companyId" : 78,
  "MetaData" : "Large Meta Data",
}

在搜索交易时,用户可以选择日期约束,然后系统将一次显示20、50、100或200条记录,并具有移至下一组或跳至特定页码的能力。换句话说,像这样

First Back 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... Next Last 

我创建了一种算法,该算法可以通过检查将要从中提取数据的每个集合的大小,基于每个页面的限制来计算要跳转到的记录。但是,这仅在为一个客户端提取数据时有效。现在,我必须执行相同的操作,并在特定时间范围内合并来自多个客户端的数据。

我希望我能够从SQL创建类似于UNION的东西,在其中我可以合并多个集合并将它们视为一个,同时在它们上运行附加过滤器。 我已经尝试过使用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).Union(aggregate([])。Select(trans2 => trans2))

任何帮助或见识将不胜感激...

0 个答案:

没有答案