首页 > 解决方案 > 如何过滤NULL?

问题描述

"order (S)","method (NULL)","time (L)"
"/1553695740/Bar","true","[  { ""N"" : ""1556593200"" },  { ""N"" : ""1556859600"" }]"
"/1556439461/adasd","true","[  { ""N"" : ""1556593200"" },  { ""N"" : ""1556679600"" }]"
"/1556516482/Foobar","cheque","[  { ""N"" : ""1556766000"" }]"

我如何扫描或查询空的“方法”属性值?https://s.natalian.org/2019-04-29/null.mp4

标签: amazon-web-servicesamazon-dynamodb

解决方案


不幸的是,DynamoDB 控制台提供了一个简单的 GUI,并假定您要执行的操作都具有相同的类型。当您在“NULL”类型的列上选择过滤器时,它只允许您存在或不存在。这是有道理的,因为仅包含 NULL 数据类型的列可以存在也可以不存在。

您在这里拥有的是包含多种数据类型的列(因为 NULL 是与 String 不同的数据类型)。有很多方法可以在这里过滤你想要的东西,但我不相信它们在控制台上可供你使用。下面是一个关于如何通过 AWS CLI 过滤数据集的示例(注意:由于您的列被命名为保留字method,因此您需要使用表达式属性名称对其进行别名):

使用过滤器表达式

$ aws dynamodb scan --table-name plocal --filter-expression '#M = :null' --expression-attribute-values '{":null":{"NULL":true}}' --expression-attribute-names '{"#M":"method"}'

考虑避免这种情况的一个选项是更新您的逻辑以在将数据写入数据库时​​写入一些排序填充字符串值而不是 null 或空字符串(即“无”或“N/A”)。然后,您可以只对字符串进行操作并搜索该值。

DynamoDB 当前不允许空字符串的字符串值,如果您尝试直接放置这些项目,则会出现错误。为了让这个“更容易”,许多 SDK 提供了将对象映射到 DyanmoDB 项目的映射器/转换器,这通常涉及将空字符串转换为 Null 类型,作为解决无空字符串规则的一种方法。

如果您需要区分null"",您将需要编写一些自定义逻辑,以便在将空字符串"__EMPTY_STRING"存储在 DyanmoDB 中时将它们编组/解组为唯一的字符串值(即 )。


推荐阅读