Google Cloud Datastore获取布尔设置为false或null的实体?

时间:2017-10-16 17:24:16

标签: google-app-engine google-cloud-datastore google-cloud-platform

我有一堆带有布尔字段的实体,可以是:true,false或null(实际的空值)。我需要检索将此字段设置为null或false的所有实体。我知道GCD不支持不相等的查询,但我认为我通过查询字段小于true的所有实体来使其工作。 它似乎工作,但我不知道为什么它的工作原理。 null和false总是小于true吗?

2 个答案:

答案 0 :(得分:1)

任何这些工作:

test_query = Test.query(Test.bool != True).fetch()
test_query = Test.query(Test.bool.IN([False, None])).fetch()
test_query = Test.query(Test.bool < True).fetch()

在Python中:

>>> None < False < True
True

答案 1 :(得分:0)

数据存储本身不支持OR和!=(不等于)运算符。

!=的Python实现是完全编程的,并且在与其他查询操作一起使用时具有许多限制。

当提供[False,None]时,使用IN运算符进行搜索将导致多次查询被启动并在此调用的单个结果中合并。

&#39;&lt;真正的&#39;操作将找不到没有任何值的属性(空val),因为它没有被索引,但会找到false和null值,这可以在一个查询中完成。

所以,最好的选择是(在JavaScript上):

let query = db.createQuery("SomeNamespace", "SomeKind")
    .filter("property", "<", true);