数据存储区:`SELECT * FROM Entity WHERE属性IS NULL`尽管没有属性的实体,但不返回结果

时间:2017-07-10 13:28:41

标签: google-cloud-datastore google-cloud-platform gql gqlquery

我正在使用Google Cloud Datastore并成功存储了实体。

现在我正在尝试根据属性的存在来查询它们。 我使用"查询按GQL"数据存储区用户界面中的标签:https://console.cloud.google.com/datastore/entities/query/gql

对于某些实体,我在保存它时没有指定property属性,所以我希望将它们设置为NULL。 但是,当我查询SELECT * FROM Entity WHERE property IS NULL时,不会返回任何结果。

2 个答案:

答案 0 :(得分:2)

这是按预期工作的:

根据Datastore documentation

  

Null是一个值,而不是没有值。   无法确定实体是否缺少属性的值(即,属性是否没有值)。如果使用nonexistent = NULL形式的条件,将会检查是否为该属性显式存储了空值。例如,SELECT * FROM Task WHERE nonexistent = NULL永远不会产生没有为属性nonexistent设置值的实体。

因此,要明确检索property设置为NULL的实体,您必须为这些实体存储property: NULL

答案 1 :(得分:0)

你想要实现的目标是不可能的。 NULL与不存在的属性不同。

但正如Nick Johnson here提到的那样,

  

解决方法是为更新的属性提供默认值,并查询该值

我个人没试过,我不确定它是否有效,但我建议你尝试一下。

如果它不起作用,唯一的另一个选择是遍历模型的每个记录并使用默认值更新所有没有值的现有实体。