DynamoDB的全局二级索引允许索引稀疏.这意味着如果您有一个GSI,其项目的散列或范围键未定义,那么该项目将不会包含在GSI中.这在许多用例中很有用,因为它允许您直接识别包含某些字段的记录.但是,如果您正在寻找缺少字段,这种方法将无法工作.
要获得所有未设置字段的项目,您可能需要使用过滤器进行扫描.此操作将非常昂贵,但它将是直截了当的代码,如下所示:
var params = { TableName: "Accounts", FilterExpression: "attribute_not_exists(email)" }; dynamodb.scan(params, { if (err) console.log(JSON.stringify(err, null, 2)); else console.log(JSON.stringify(data, null, 2)); });
如果该字段不存在,则@jaredHatfield是正确的,但如果该字段为空则不起作用.NULL是关键字,不能直接使用.但您可以将它与ExpressionAttributeValues一起使用.
const params = { TableName: "Accounts", FilterExpression: "attribute_not_exists(email) or email = :null", ExpressionAttributeValues: { ':null': null } } dynamodb.scan(params, (err, data) => { if (err) console.log(JSON.stringify(err, null, 2)); else console.log(JSON.stringify(data, null, 2)); })