indexing - 如何查询 RavenDB 中具有日期范围的子集合的索引?

标签 indexing ravendb

我在这里准备了完整的测试用例:https://gist.github.com/pkrakowiak/cc8addf5725193a01f2d

Location文件。每个地点在某些时间段内可以有零个或多个赞助商(由 IList<Sponsorship> Sponsors 属性表示)。我只需要返回在特定日期(在我的示例中为 3 月 15 日)赞助的地点。所以这样的位置必须至少有一个Sponsorship与以下查询匹配的实例:.Where(x => x.Sponsors.Any(s => s.From <= today && s.To >= today))

我准备了两个测试,其中一个没有明确使用索引:CanGetCurrentlySponsoredLocations ,以及使用我创建的静态索引的一个: CanGetCurrentlySponsoredLocationsUsingStaticIndex 。第一个会通过,第二个会失败。问题是——如何让第二次测试通过?我需要对我的 Locations_ByCoordinates 应用什么样的修改索引?

如果您想知道索引名称的来源或评论是什么 - 请忽略它们。 :) 它们是我测试的其他东西的剩余部分。

更新

我首先向 RavenDB Google 官方群组提出了这个问题:https://groups.google.com/forum/?fromgroups=#!topic/ravendb/ySUPXqkpTA8遗憾的是,它并没有给我带来解决方案。

最佳答案

通过单元测试的最简单的索引是:

private class Locations_ByCoordinates : AbstractIndexCreationTask<Location>
{
    public Locations_ByCoordinates()
    {
        Map = locations => from l in locations
                           from s in l.Sponsors
                           select new
                           {
                               Sponsors_From = s.From,
                               Sponsors_To = s.To
                           };
    }
}

您可能想选择一个更好的名称,因为坐标未建立索引。

我不确定您的其他测试 CanSortOnSponsorshipStatus 是关于什么的。

更新

要包含没有赞助商的位置,请使用 DefaultIfEmpty linq 扩展方法。这将确保所有位置至少有一个索引条目。

private class Locations_ByCoordinates : AbstractIndexCreationTask<Location>
{
    public Locations_ByCoordinates()
    {
        Map = locations => from l in locations
                           from s in l.Sponsors
                                      .DefaultIfEmpty(new Sponsorship
                                      {
                                        From = DateTime.MinValue,
                                        To = DateTime.MaxValue
                                      })
                           select new
                           {
                               Sponsors_From = s.From,
                               Sponsors_To = s.To
                           };
    }
}

关于indexing - 如何查询 RavenDB 中具有日期范围的子集合的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586057/

相关文章:

c# - 用字符串初始化自己的类型

asp.net-web-api - 如何告诉 RavenDB 忽略属性而不是 WebAPI?

.net-core - 我可以在 RavenDB 中使用构造函数重载吗?

mysql - 从 SQL 导入 RavenDB Northwind - 为什么没有给 employee_privileges 一个集合?

MySQL 特定的查询性能调优

python - 在 python 中跟踪索引数组时出现意外行为

javascript - JQuery .index() 不返回元素的正确索引

python - 为什么 pandas 比较运算符不在索引上对齐?

ravendb - 你能访问 RavenDB 文档 session 的统计信息吗

c# - 聚合根通过ID引用另一个聚合根,如何使用RavenDB保持完整性?