У меня есть документ:
{
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 приведет к тому, что индекс не будет использоваться). Может кто-нибудь объяснить, что здесь происходит?