AWS Dynamodb 扫描 |扫描是否存在列值

AWS Dynamodb Scan | Scan if exists column values

我有一个 table 有一个名为“items”的列,但不是所有行都有它,所以我想扫描所有有“items”的行。

类似于:

$resposta = $clientDB->scan(array(
    'TableName' => 'tableName',
    'Key' => [
        'items' => ['S' => 'exists']
    ]
));

但是我不知道该怎么做...

table有10000行,但是只有10行有“items”,我只想获取这10行。

编辑:

正如 Seth Geoghegan 在下面指出的那样,有必要为我要过滤的属性创建一个全局二级索引。

我最终来到这里:

    $params = [
        'TableName' => 'tableName',
        'FilterExpression' => "attribute_exists(items)"
    ];

    $params = [
        'TableName' => 'tableName',
        'FilterExpression' => 'items != :null',
        'ExpressionAttributeValues' =>  [
            ':null' => null,
        ],
    ];

但两者都没有用...第一个看到需要设置的 ExpressionAttributeValues,第二个 php 停止工作,没有错误日志。

这是全球二级索引 (GSI) 的完美用例!

您可以在 items 属性上创建 GSI。定义了 items 属性的项目将投影到 GSI 中。重要的是,not 包含此属性的项目将 not 包含在索引中。然后您可以查询 GSI 并检索您想要的项目。

好吧,经过一番努力,我找到了一个方法:

    $resposta = $clientDB->scan(array(
        'TableName' => 'tableName',
        'FilterExpression' => "attribute_exists(items)"
    ));

在我为“items”(由 Seth Geoghegan 指出)创建了另一个全局二级索引 (GSI) 之后,我只需要在扫描函数中添加 FilterExpression "attribute_exists(items") 和它成功了。