Indexing RejectDB:二级复合索引/聚合查询和中间文档生成
让我们假设这样的表内容,其中对于相同的产品_id,在status==1(已发布)和最终status==0(未发布),然后变为==2(已删除)期间,我们的行数与更新的行数相同 这里的困难在于,只要产品id文档的最后更新日期小于或等于提供的日期,它仍将被视为最新状态 我尝试按产品id进行分组,然后取最大值(“上次更新”),然后仅当status==1时,才保持每个缩减文档的唯一性 我想为每个状态/给定日期建立一个索引 或者,另一种解决方案是在另一个表中插入聚合的结果,该聚合在每个日期只存储一个唯一的文档,包含与相同条件匹配的所有初始文档ID,等等。。。 然后使用这些中间记录执行联接,以获取给定日期/状态下每个产品标识的值 比如:Indexing RejectDB:二级复合索引/聚合查询和中间文档生成,indexing,mapreduce,aggregate,rethinkdb,rethinkdb-python,Indexing,Mapreduce,Aggregate,Rethinkdb,Rethinkdb Python,让我们假设这样的表内容,其中对于相同的产品_id,在status==1(已发布)和最终status==0(未发布),然后变为==2(已删除)期间,我们的行数与更新的行数相同 这里的困难在于,只要产品id文档的最后更新日期小于或等于提供的日期,它仍将被视为最新状态 我尝试按产品id进行分组,然后取最大值(“上次更新”),然后仅当status==1时,才保持每个缩减文档的唯一性 我想为每个状态/给定日期建立一个索引 或者,另一种解决方案是在另一个表中插入聚合的结果,该聚合在每个日期只存储一个唯一的文
{
date: <date_object>,
documents: [
{id: document_id, status: 1},
{id: document_id, status: 1},
{id: document_id, status: 2},
{id: document_id, status: 0},
...
]
}
嗨,由于我的英语,我不能理解这个。您是否可以通过一些示例数据,让您的问题更清楚、更容易理解,以及导出的输出是什么。在你的问题中,你已经这样做了,但不知怎么的,我不能完全理解,可能是因为我的英语。嗨,由于我的英语,我不能理解这个。您是否可以通过一些示例数据,让您的问题更清楚、更容易理解,以及导出的输出是什么。你已经在你的问题中这样做了,但不知怎么的,我不能完全理解,可能是因为我的英语。
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]
{
date: <date_object>,
documents: [
{id: document_id, status: 1},
{id: document_id, status: 1},
{id: document_id, status: 2},
{id: document_id, status: 0},
...
]
}
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
)
})