Couchbase查询:如何排除is_deleted为true的文档?
正确的Couchbase N1QL查询语句
你的问题根源在于两个细节:
- doc1的
is_deleted是布尔值true,不是字符串"true",用字符串做比较根本匹配不到它; - doc3没有
is_deleted字段,is_deleted != "true"这类条件会直接过滤掉无此字段的文档,因为字段不存在时,不等于比较的结果为未知,不会被纳入返回结果。
要实现仅排除is_deleted为true的文档、保留其余所有(包括is_deleted为false或无此字段的文档),可以用以下两种写法:
写法一(简洁推荐)
SELECT * FROM `你的桶名` WHERE NOT (is_deleted = true);
逻辑说明:当is_deleted不存在时,is_deleted = true返回false,NOT之后转为true,因此无此字段的文档会被保留;仅当is_deleted确实等于布尔true时,才会被排除。
写法二(逻辑更直观)
SELECT * FROM `你的桶名` WHERE is_deleted != true OR is_deleted IS MISSING;
逻辑说明:明确指定两种符合要求的情况——要么is_deleted不等于布尔true,要么字段本身不存在。
内容的提问来源于stack exchange,提问作者queeg
相关产品推荐
相关产品推荐

