'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 中创建一个可以做到这一点的存储过程。但是,存储过程只能在单个分区内执行,因此它不是在单个查询中组合多个文档的通用解决方案。