DynamoDB - 使用 nodejs 扫描和过滤地图
DynamoDB - scan and filter map with nodejs
我正在使用 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);
});
它应该 return 一条记录,但我没有得到任何结果。我在这里缺少什么?
感谢您的帮助!
必须包含数组索引才能从列表数据类型中获取值。否则,您可能需要使用 CONTAINS 函数。但是,CONTAINS 函数需要对象中的所有属性来映射项目。在您的场景中,您需要知道电子邮件、ID 和角色才能使用 CONTAINS 函数。
注:-
如果您有多个集群成员并且您想要匹配数组中其他出现的成员,则以下解决方案将不起作用。为了实现这一点,您需要通过在对象中提供所有三个属性来使用 CONTAINS 函数。
var params = {
TableName: "mytable",
FilterExpression: "clustermembers[0].email = :emailVal",
ExpressionAttributeValues: {
":emailVal": 'teste@teste.com'
}
};
我正在使用 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);
});
它应该 return 一条记录,但我没有得到任何结果。我在这里缺少什么?
感谢您的帮助!
必须包含数组索引才能从列表数据类型中获取值。否则,您可能需要使用 CONTAINS 函数。但是,CONTAINS 函数需要对象中的所有属性来映射项目。在您的场景中,您需要知道电子邮件、ID 和角色才能使用 CONTAINS 函数。
注:-
如果您有多个集群成员并且您想要匹配数组中其他出现的成员,则以下解决方案将不起作用。为了实现这一点,您需要通过在对象中提供所有三个属性来使用 CONTAINS 函数。
var params = {
TableName: "mytable",
FilterExpression: "clustermembers[0].email = :emailVal",
ExpressionAttributeValues: {
":emailVal": 'teste@teste.com'
}
};