Indexing RejectDB:二级复合索引/聚合查询和中间文档生成

Indexing RejectDB:二级复合索引/聚合查询和中间文档生成,indexing,mapreduce,aggregate,rethinkdb,rethinkdb-python,Indexing,Mapreduce,Aggregate,Rethinkdb,Rethinkdb Python,让我们假设这样的表内容,其中对于相同的产品_id,在status==1(已发布)和最终status==0(未发布),然后变为==2(已删除)期间,我们的行数与更新的行数相同 这里的困难在于,只要产品id文档的最后更新日期小于或等于提供的日期,它仍将被视为最新状态 我尝试按产品id进行分组,然后取最大值(“上次更新”),然后仅当status==1时,才保持每个缩减文档的唯一性 我想为每个状态/给定日期建立一个索引 或者,另一种解决方案是在另一个表中插入聚合的结果,该聚合在每个日期只存储一个唯一的文

让我们假设这样的表内容,其中对于相同的产品_id,在status==1(已发布)和最终status==0(未发布),然后变为==2(已删除)期间,我们的行数与更新的行数相同

这里的困难在于,只要产品id文档的最后更新日期小于或等于提供的日期,它仍将被视为最新状态

我尝试按产品id进行分组,然后取最大值(“上次更新”),然后仅当status==1时,才保持每个缩减文档的唯一性

我想为每个状态/给定日期建立一个索引

或者,另一种解决方案是在另一个表中插入聚合的结果,该聚合在每个日期只存储一个唯一的文档,包含与相同条件匹配的所有初始文档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},
        ...
    ]
}

嗨,由于我的英语,我不能理解这个。您是否可以通过一些示例数据,让您的问题更清楚、更容易理解,以及导出的输出是什么。在你的问题中,你已经这样做了,但不知怎么的,我不能完全理解,可能是因为我的英语。嗨,由于我的英语,我不能理解这个。您是否可以通过一些示例数据,让您的问题更清楚、更容易理解,以及导出的输出是什么。你已经在你的问题中这样做了,但不知怎么的,我不能完全理解,可能是因为我的英语。
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
    )
  })