让我们假设这样的表内容,对于相同的product_id,我们在status == 1(已发布)期间拥有比更新更多的行,最后状态== 0(未发布)然后变为== 2(已删除) )
{id: <auto>, product_id: 1, last_updated: 2015-12-1, status: 1, price: 1}
{id: <auto>, product_id: 2, last_updated: 2015-12-1, status: 1, price: 10}
{id: <auto>, product_id: 1, last_updated: 2015-12-2, status: 1, price: 2}
{id: <auto>, product_id: 1, last_updated: 2015-12-3, status: 0, price: 2}
{id: <auto>, product_id: 2, last_updated: 2015-12-2, status: 0, price: 10}
{id: <auto>, product_id: 3, last_updated: 2015-12-2, status: 1, price: 123}
{id: <auto>, product_id: 1, last_updated: 2015-12-4, status: 2, price: 2}
{id: <auto>, product_id: 2, last_updated: 2015-12-4, status: 2, price: 10}
现在,我试图找到一种方法,可能使用二级复合索引,例如,给定一个类似col1的日期(使用r.time)
DATE STATUS==1 STATUS==0 STATUS==2
2015-12-1 [101, 102] [] []
2015-12-2 [103, 106] [105] []
2015-12-3 [106] [104, 105] []
2015-12-4 [] [] [107, 108]
这里的困难在于,只要product_id文档的last_updated日期小于或等于提供的日期,它仍然被视为最新状态。
我尝试按product_id进行分组,然后取最大值(&#39; last_updated&#39;),然后只保留每个缩减唯一文档,如果状态== 1
我想到每个状态/ given_date
都有一个索引或者另一种解决方案是,在另一个表中插入聚合的结果,该聚合仅在每个日期存储唯一文档,包含匹配相同条件的所有初始文档ID,依此类推...... 然后使用这些中间记录执行连接,以获取给定日期/状态下每个product_id的值。
类似的东西:
{
date: <date_object>,
documents: [
{id: document_id, status: 1},
{id: document_id, status: 1},
{id: document_id, status: 2},
{id: document_id, status: 0},
...
]
}
请告知
编辑1:
这是我尝试运行以分析我的数据的查询的示例,例如,这里是为了概述每个包含多个文档的组的状态:
r.db('test').table('products_10k_sample')
.group({index: 'product_id'})
.orderBy(r.desc('last_updated'))
.ungroup()
.map(function(x){
return r.branch(
x('reduction').count().gt(1),
x('reduction').map(function(m){
return [m('last_updated').toISO8601(), m('status'), m('product_id')]
}),
null
)
})