couchbase,为什么这个查询 return 零结果

couchbase, Why this query return zero result

我正在尝试 select 使用此 n1ql couchbase 查询为给定客户创建的最新订单:

select O1.* 
from `order` as O1 where
O1.creationDateTime = (select max(O2.creationDateTime)  from `order` O2 )

我什至都没有结果:

select max(O2.creationDateTime) from订单O2

return 这个结果:

[
  {
    "": 1545569597891
  }
]

感谢您的帮助

通过添加 'in'(因为结果是一个列表)和 'raw'(为了得到字面值)我解决了它:

select O1.* 
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime  from `order` O2 )

如果您不提供 RAW 子查询结果,则会变成无法与值匹配的对象数组。通过使用 RAW,它变成了值数组。

您似乎需要具有最长 creationDateTime 的文档。试试这个。

SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;

MAX 参数是 2 个元素的 ARRY。第一个是 creationDateTime,第二个是整个文档。它尝试 ARRAY 的最大值,即第一个值,如果有关系则第二个值。最终它投射出第二个值,即整个文档。

这避免了两次扫描整个订单。

如果你想要更高效的查询。

Use Index Order.

CREATE INDEX ix1 ON `order`(creationDateTime DESC);

SELECT RAW o1
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL
ORDER BY o1.creationDateTime DESC LIMIT 1;

OR

Use Covered query decide which document key qualifies and then Fetch that document only.

SELECT o.* FROM (
     SELECT RAW MAX([o1.creationDateTime, META(o1).id])[1]
     FROM `order` AS o1
     WHERE o1.creationDateTime IS NOT NULL) AS o1 
JOIN `order` AS o  ON KEYS o1;