couchbase,为什么此查询返回零结果

couchbase,为什么此查询返回零结果,couchbase,n1ql,Couchbase,N1ql,我正在尝试使用此n1ql couchbase查询为给定客户选择最新创建的订单: select O1.* from `order` as O1 where O1.creationDateTime = (select max(O2.creationDateTime) from `order` O2 ) 我甚至没有得到任何结果: 从订单O2 返回此结果: [ { "$1": 1545569597891 } ] 感谢您的帮助通过添加“in”(因为结果是一个列表)和“raw”(为了

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

select O1.* 
from `order` as O1 where
O1.creationDateTime = (select max(O2.creationDateTime)  from `order` O2 )
我甚至没有得到任何结果:

从订单
O2

返回此结果:

[
  {
    "$1": 1545569597891
  }
]
感谢您的帮助

通过添加“in”(因为结果是一个列表)和“raw”(为了获得文字值),我解决了这个问题:

select O1.* 
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime  from `order` O2 )
通过添加“in”(因为结果是一个列表)和“raw”(为了只获取文本值),我解决了这个问题:

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

若你们不给出原始的子查询结果,那个么它将变成一个对象数组,而这个数组不能和值匹配。经过原始处理,它变成了一个值数组

看起来您需要具有最大creationDateTime的文档。试试这个

SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;
最大参数是2个元素的数组。第一个是creationDateTime,第二个是整个文档。它尝试将数组的值设为最大值,即第一个值,若有,则取第二个值。最终,它投射出第二个价值,即整个文档

这样可以避免扫描整个订单两次

如果您想要更高效的查询

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;

若你们不给出原始的子查询结果,那个么它将变成一个对象数组,而这个数组不能和值匹配。经过原始处理,它变成了一个值数组

看起来您需要具有最大creationDateTime的文档。试试这个

SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;
最大参数是2个元素的数组。第一个是creationDateTime,第二个是整个文档。它尝试将数组的值设为最大值,即第一个值,若有,则取第二个值。最终,它投射出第二个价值,即整个文档

这样可以避免扫描整个订单两次

如果您想要更高效的查询

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;