dynamo db FilterExpression,使用值作为键在json对象中查找

时间:2018-10-18 11:40:25

标签: amazon-dynamodb

可以通过某种方式通过存储在同一对象中的键名过滤结果吗? 我有JSON对象“ keys”,在属性“ default”中存储了我需要的对象的密钥。可以像这样keys[keys.default].type = some_type进行过滤吗?

    var params = {
    TableName: 'TABLE_NAME',
    IndexName: 'TABLE_INDEX', // optional (if querying an index)
    KeyConditionExpression: 'myId = :value', 
    FilterExpression: '#kmap[#kmap.#def].#tp = :keyval', 
    ExpressionAttributeNames: {names with special characters
        '#kmap': 'keys',
        '#tp': 'type',
        '#def': 'default'
    },
    ExpressionAttributeValues: { // a map of substitutions for all attribute values
        ':value': '1',
        ':keyval': 'some_type'
      },
    Limit: 10, // optional (limit the number of items to evaluate)

    ProjectionExpression: "displayName, #kmap",

    ReturnConsumedCapacity: 'TOTLAL', // optional (NONE | TOTAL | INDEXES)
};
docClient.query(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});

1 个答案:

答案 0 :(得分:0)

我很确定答案是否定的。

据我所知,这个keys[keys.default]甚至不是有效的json。

当然,您可以分两个步骤进行操作:

  1. 首先,查询以获取默认密钥
  2. 然后查询以获取值

别忘了,过滤器会严格应用于结果集-仍然需要查询或扫描操作所指定的遍历遍历。

因此,您可以更轻松地在客户端上运行查询

最后,如果这是ypu需要执行的典型查询,则作为优化,您可以将默认键和值提升为该项目的顶级属性。然后,您实际上可以在该属性上创建GSI并可以进行有效的查找。