我有一个文件:
{
contact: {
id: '123'
},
channels: [
{
... some channel info...
}
],
lastUpdatedEpoch: 1583937675
}
我有以下不返回上述文档的查询:
SELECT p FROM p JOIN c IN p.channels
WHERE (NOT IS_DEFINED(p.lastUpdatedEpoch) OR p.lastUpdatedEpoch < 1585733881)
AND p.contact.id = '123'
但是当我删除 NOT IS_DEFINED 检查时,它会正确返回文档:
SELECT p FROM p JOIN c IN p.channels
WHERE (p.lastUpdatedEpoch < 1585733881)
AND p.contact.id = '123'
我还尝试将 NOT IS_DEFINED 子句替换为 FALSE 并返回文档:
SELECT p FROM p JOIN c IN p.channels
WHERE (FALSE OR p.lastUpdatedEpoch < 1585733881)
AND p.contact.id = '123'
此外,如果我删除 JOIN,查询将按预期工作并返回文档:
SELECT p FROM
WHERE (NOT IS_DEFINED(p.lastUpdatedEpoch) OR p.lastUpdatedEpoch < 1585733881)
AND p.contact.id = '123'
对我来说,这种行为是出乎意料的。定义 lastUpdatedEpoch 时,我希望第一个和第二个查询的结果相同(除了 NOT_ISDEFINED 将导致不使用索引这一事实之外)。有人可以解释一下这里发生了什么吗?

