假设我们正在处理跨多个渠道(报纸、工作委员会等)的各种职位空缺的广告。对于每个频道,我们可以购买一个“发布期”,这意味着该频道将在此期间宣传我们的职位空缺。我们如何找到给定频道的发布期为今天有效(即从今天或之前开始,到今天或之后结束)的工作?目的是能够生成“活动”职位空缺的馈送,(例如)工作板可以定期消费以确定哪些职位应该显示给它的用户。
另一个问题是,每个职位空缺都与给定的租户 ID 相关联:必须在租户和频道的范围内生成提要。
假设我们有以下简化的文档(如果您认为应该对数据进行不同的建模,也请告诉我):
{
"_id": "A",
"tenant_id": "foo",
"name": "Job A",
"publication_periods": [
{
"channel": "linkedin",
"start": "2021-03-10T00:00:0.0Z",
"end": "2021-03-17T00:00:0.0Z"
},
{
"channel": "linkedin",
"start": "2021-04-10T00:00:0.0Z",
"end": "2021-04-17T00:00:0.0Z"
},
{
"channel": "monster.com",
"start": "2021-03-10T00:00:0.0Z",
"end": "2021-03-17T00:00:0.0Z"
}
]
}
{
"_id": "B",
"tenant_id": "foo",
"name": "Job B",
"publication_periods": [
{
"channel": "linkedin",
"start": "2021-04-10T00:00:0.0Z",
"end": "2021-04-17T00:00:0.0Z"
},
{
"channel": "monster.com",
"start": "2021-03-15T00:00:0.0Z",
"end": "2021-03-20T00:00:0.0Z"
}
]
}
{
"_id": "C",
"tenant_id": "foo",
"name": "Job C",
"publication_periods": [
{
"channel": "monster.com",
"start": "2021-05-15T00:00:0.0Z",
"end": "2021-05-20T00:00:0.0Z"
}
]
}
{
"_id": "D",
"tenant_id": "bar",
"name": "Job D",
"publication_periods": [
...
]
}
如何查询与“monster.com”的有效发布期为 2021 年 3 月 17 日的租户“foo”相关联的工作?(即这个查询应该返回工作 A 和 B。)
请注意,数据库将包含其他(不相关)类型的文档。
因为我本质上需要“在publication_periods
数组中找到包含对象的所有职位空缺:CHAN 作为通道值,“start”<= DATE,“end”>= DATE”看来我需要一个 Mango 查询来实现这一点,因为标准视图查询不提供比较运算符(如果这是错误的,请纠正我)。
自然,我希望 Mango 查询仅在相关数据上执行(即排除不是职位空缺的文档),但我可以找到有关如何执行此操作的参考资料(无论是在文档中还是在其他地方):我找到的所有资源只是似乎在整个文档集上定义了芒果索引,依赖于没有索引字段的文档不会被索引的事实。
我怎样才能实现我所追求的?
最初,我正在考虑创建一个视图,该视图将与对象一起发出发布期间信息{'_id': id}
,以便在查询时将职位空缺文档“加入”到匹配期间(根据执行一对多“JOIN”的最佳方式" 在 CouchDB 中)。但是,我意识到我无法根据需要查询此视图(即今天之前的“开始”值,今天之后的“结束”值),因为我没有明确的开始/结束键可以使用......而且我不知道如何为此正确利用 Mango 索引/查询。大概我必须根据文档类型和出版期的存在创建一个部分索引,但是我什至如何索引可以位于单个文档中的多个出版期?可以针对特定视图而不是数据库中的所有文档定义 Mango 索引吗?