'Join' cosmos DB 3.3.0 不支持该方法,还有其他选择吗
'Join' Method not supported in cosmos DB 3.3.0,Is there any other option
我正在查询报告生成,下面是一些在
时通过的场景
var account_logs = container.GetItemLinqQueryable<AccountLog>(true).Where(u => u.AccessedOn > MinDate);
var TempGoodResetIDs = (from ll in account_logs
where (ll.AccessedOn >= StartDate) &&
(ll.AccessedOn <= EndDate)
&& ((ll.Activity == 3) &&
((ll.Result == (int)Log.AccountResult.PasswordReset) ||
(ll.Result == (int)Log.AccountResult.TempPWDSentThroughEmail)))
select ll)
这通过了,我 gotaccount_log 填满了数据。
然后我在代码中有这样的东西。
var BadResetIDs = TempBadResetIDs.Select(ll => ll.ActivityID).Distinct().Except(GoodResetIDs);
var Captcha = (from ll in account_logs
join
b in BadResetIDs on ll.ActivityID equals b
where ((ll.Activity == 3) && (ll.Result == 5))
select ll.ActivityID).Count()
这里我得到一个例外,'Join' 在 Cosmos.Is 中不受支持,有一个解决方法可以将 cosmos 文档与 BadResetIDs 结合起来,它是一个可查询的并且包含 activity ID?
我使用过 SelectMany 但不确定谁比较两个不同的对象 accountlog 和 BadResetIDs。
虽然 Cosmos SQL has a JOIN operator 它只能通过在单个文档中加入数据来工作。 Cosmos 不支持在查询中连接多个文档,因此不支持 LINQ join
运算符。
在您的情况下,您可以通过执行两个查询来解决问题。但是,您会将数据从数据库移动到客户端以创建第二个查询,并且您 运行 在此期间数据库发生更改的风险。
希望在查询中加入文档可能表明您正在 Cosmos 之上改造关系数据库方法。从一开始就基于 "no SQL" 思考来设计系统可能会导致截然不同的数据模型。
如果您真正掌握了技术知识,那么对于无法合并多个文档的查询有一个例外:您可以在 javascript 中创建一个可以做到这一点的存储过程。但是,存储过程只能在单个分区内执行,因此它不是在单个查询中组合多个文档的通用解决方案。
我正在查询报告生成,下面是一些在
时通过的场景 var account_logs = container.GetItemLinqQueryable<AccountLog>(true).Where(u => u.AccessedOn > MinDate);
var TempGoodResetIDs = (from ll in account_logs
where (ll.AccessedOn >= StartDate) &&
(ll.AccessedOn <= EndDate)
&& ((ll.Activity == 3) &&
((ll.Result == (int)Log.AccountResult.PasswordReset) ||
(ll.Result == (int)Log.AccountResult.TempPWDSentThroughEmail)))
select ll)
这通过了,我 gotaccount_log 填满了数据。 然后我在代码中有这样的东西。
var BadResetIDs = TempBadResetIDs.Select(ll => ll.ActivityID).Distinct().Except(GoodResetIDs);
var Captcha = (from ll in account_logs
join
b in BadResetIDs on ll.ActivityID equals b
where ((ll.Activity == 3) && (ll.Result == 5))
select ll.ActivityID).Count()
这里我得到一个例外,'Join' 在 Cosmos.Is 中不受支持,有一个解决方法可以将 cosmos 文档与 BadResetIDs 结合起来,它是一个可查询的并且包含 activity ID? 我使用过 SelectMany 但不确定谁比较两个不同的对象 accountlog 和 BadResetIDs。
虽然 Cosmos SQL has a JOIN operator 它只能通过在单个文档中加入数据来工作。 Cosmos 不支持在查询中连接多个文档,因此不支持 LINQ join
运算符。
在您的情况下,您可以通过执行两个查询来解决问题。但是,您会将数据从数据库移动到客户端以创建第二个查询,并且您 运行 在此期间数据库发生更改的风险。
希望在查询中加入文档可能表明您正在 Cosmos 之上改造关系数据库方法。从一开始就基于 "no SQL" 思考来设计系统可能会导致截然不同的数据模型。
如果您真正掌握了技术知识,那么对于无法合并多个文档的查询有一个例外:您可以在 javascript 中创建一个可以做到这一点的存储过程。但是,存储过程只能在单个分区内执行,因此它不是在单个查询中组合多个文档的通用解决方案。