带WHERE子句的Azure Cosmos SQL结果没有意义

问题描述

我正在对我的Cosmos数据库运行一些查询,结果似乎没有意义。当我知道应该得到一些结果时,通过一些查询我得到0个结果。这是查询的结果:

SELECT COUNT(c.id) from c where c.ownerTime='2010775021_202009'                        -- 165229
SELECT COUNT(c.id) from c where c.ownerTime='2010775021_202009' and c.source='five9'   -- 132100
SELECT COUNT(c.id) from c where c.ownerTime='2010775021_202009' and c.source<>'five9'  -- 0
SELECT COUNT(c.id) from c where c.ownerTime='2010775021_202009' and c.source=null      -- 0

我的目标是对source属性不等于'five9'的所有项目进行计数。但是该查询(如上所示)返回的计数为0。如您所见,在第一个查询中,此分区中的项目总数为165,229。从第二个查询开始,此分区中source等于'five9'的项目总数为132,100。常识告诉我,来源不等于“ five9”的项目数应为33,129。为什么我的查询显示为0?

要记住的一件事是,当我去检查原始形式的项目时,没有source='five9'的项目根本没有source属性。会导致这种现象吗?另外,ownerTime是分区键。

这是一小部分数据样本:

SELECT c.id,c.ownerTime,c.source from c where c.ownerTime='2010775021_202009'
...
{
    "id": "L2n8D4c4GOFQTUA","ownerTime": "2010775021_202009"
},{
    "id": "3524zXL55zQmQ8qk","ownerTime": "2010775021_202009","source": "five9"
}
...

解决方法

请尝试以下sql:

SELECT COUNT(c.id) from c where c.ownerTime='2010775021_202009' and (not IS_DEFINED(c.source) or c.source<>'five9')