【问题标题】:Azure Table Storage query for records based on property that may not exist for all recordsAzure 表存储查询基于可能并非所有记录都存在的属性的记录
【发布时间】:2015-10-31 08:31:24
【问题描述】:

我正在为我的服务使用 Azure 表存储,并尝试为其引入软删除功能。我将向标记为删除的条目添加属性IsMarkedForDeletion。当我查询时,我只需要未标记为删除的条目。在未被删除的字段中,IsMarkedForDeletion 甚至都不存在。

我尝试了以下方法:

<...query...> and (IsMarkedForDeletion ne true)
<...query...> and (IsMarkedForDeletion eq false)
<...query...> and (not (IsMarkedForDeletion ne false))
<...query...> and (not (IsMarkedForDeletion eq true))

<...query...> and (not (IsMarkedForDeletion eq NULL)) => returns 501 Not Implemented

它们都没有显示其中没有IsMarkedForDeletion 属性的条目。

我该怎么做才能得到没有IsMarkedForDeletion的记录以及IsMarkedForDeletion属性存在的记录,但是是假的?

我曾考虑过清理数据库并将 IsMarkedForDeletion 添加到所有记录,或者在执行查询后自己过滤结果,但我想在查询本身中执行此操作,以便在创建时对我来说很容易分段请求并对结果进行分页。

【问题讨论】:

    标签: database azure azure-storage


    【解决方案1】:

    我认为这是不可能的,您可以尝试检查该字段是否等于 null,我不知道这是否能解决您的问题。但是一般Table Storage没有schema,不打算用于查询partition key和row key以外的字段。我个人认为,通过获取给定 PK+RK 的所有结果并稍后将它们过滤掉,您会更快地获得结果,而不是将其留给表存储以过滤不在 PK+RK 对中的字段。

    【讨论】:

    • 是的,我尝试了 null - 但这没有帮助。 Null 仍然是一个有效字段,它会检查属性是否存在。
    • 那么我认为不可能在查询中检查列是否存在
    • alek 是正确的,请在您的客户端进行过滤。
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多