Couchbase 如何从特定日期获取最新文档?

Couchbase 如何从特定日期获取最新文档?,couchbase,n1ql,Couchbase,N1ql,我试图从Couchbase和N1QL中指定的日期变量中获取最新的文档,该变量位于一个非常大的数据库中,每个月有1.5亿个文档。日期的最新文档可以是前一个月或上一个月的任何时间。注意,日期是Unix纪元。以下是文件的结构: { "type" : "person", "id":"001", "name":"John Doe", "date":"1491199810.435" } 我有关于日期的索引: CREATE INDEX `date` ON `mytable`(`date`)

我试图从Couchbase和N1QL中指定的日期变量中获取最新的文档,该变量位于一个非常大的数据库中,每个月有1.5亿个文档。日期的最新文档可以是前一个月或上一个月的任何时间。注意,日期是Unix纪元。以下是文件的结构:

{
  "type" : "person",
  "id":"001",
  "name":"John Doe",
  "date":"1491199810.435"
}
我有关于日期的索引:

CREATE INDEX `date` ON `mytable`(`date`) WITH { "defer_build"=true }
通常在我处理的研究生课程中,我通常会:

SELECT * WHERE date <="1491199813.000" ORDER BY date DESC LIMIT 1;
在Postgres中索引的日期只会以毫秒为单位快速响应

然而,Couchbase通过。。。限制非常慢。在相同的硬件和相同的数据上需要几分钟的时间

当然,使用Couchbase N1QL可以有效地从指定日期获取单个最新文档,但我还找不到它


您有什么想法吗?

在5.0.0之前的版本中创建负函数索引并更改查询,如下所示

CREATE INDEX `forex_dt` ON `forex`(-TONUMBER(`date`));
SELECT * FROM `forex` WHERE -TONUMBER(`date`) >= -1491199813.000 ORDER BY -TONUMBER(`date`) LIMIT 1;
在5.0.0中

CREATE INDEX `forex_dt` ON `forex`(`date` DESC);
SELECT * FROM `forex` WHERE `date` <= "1491199813.000" ORDER BY `date` DESC LIMIT 1;

您是否建议从索引中选择?这显然不起作用[{code:12003,msg:Keyspace not found Keyspace forex_dt-原因:没有名为forex_dt的bucket,查询来自用户:SELECT*from forex_dt desc其中instruments='EURGBP'和dt<1492504798 LIMIT 1}]。你能详细解释一下吗?错别字修正了。如果您还需要工具,请更改查询以在forexinstruments上创建索引forex_ddesc,-TONUMBERdate;从外汇中选择*,其中工具='欧元GBP,-TONUMBERdate>=-1491199813.000按工具排序,-TONUMBERdate限制1;