2

我正在使用 nodejs 扫描和过滤 dynamodb 中的集合,如下所示:

{
    "name": "teste123",
    "id": "4bbe0f00-67c3-11e7-a6be-b9c9fc540ac2",
    "clustermembers": [
        {
            "email": "teste@teste.com",
            "role": "ADMIN",
            "id": "4bbe0f00-67c3-11e7-a6be-b9c9fc540ac2"
        }
    ]
}

使用以下代码:

var params = {
    TableName : "mytable",
    FilterExpression : "clustermembers.email = :p_email",
    ExpressionAttributeValues : {
        ":p_email": {"S": req.params.usr_email}  
    } 
};

var promiseQuery = client.scan(params).promise();

promiseQuery
    .then(function(data) {
        res.send({clusters: data.Items});
    })
    .catch(function(err) {
        console.log('ERROR -  get all clusters by user = ' + err);
        res.status(500).send('ERROR -  get all clusters by user = ' + err);
    }); 

它应该返回一条记录,但我没有得到任何结果。我在这里缺少什么?

谢谢您的帮助!

4

1 回答 1

3

必须包含数组索引才能从 List 数据类型中获取值。否则,您可能需要使用CONTAINS函数。但是,CONTAINS 函数需要对象中的所有属性来映射项目。在您的场景中,您需要知道电子邮件、ID 和角色才能使用CONTAINS功能。

笔记:-

如果您有多个集群成员并且您希望匹配数组中其他匹配项中存在的成员,则以下解决方案将不起作用。为了实现这一点,您需要通过在对象中提供所有三个属性来使用CONTAINS函数。

var params = {
    TableName: "mytable",
    FilterExpression: "clustermembers[0].email = :emailVal",
    ExpressionAttributeValues: {
        ":emailVal": 'teste@teste.com'
    }
};
于 2017-07-13T15:50:01.343 回答