Amazon web services Dynamodb查询:使用筛选器表达式获取匹配的对象
我的数据存储在DynamoDB中的表“mysettings”中,模式如下:“pk”作为散列键,“sk”作为范围键 示例数据项:Amazon web services Dynamodb查询:使用筛选器表达式获取匹配的对象,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,我的数据存储在DynamoDB中的表“mysettings”中,模式如下:“pk”作为散列键,“sk”作为范围键 示例数据项: { "mSettings": { "gflag": true, "name": "green", "type": "B" }, "pk": "Group1", "sk": "A1000", "xSettings": { "gflag": false, "name": "blue", "type": "A
{
"mSettings": {
"gflag": true,
"name": "green",
"type": "B"
},
"pk": "Group1",
"sk": "A1000",
"xSettings": {
"gflag": false,
"name": "blue",
"type": "A"
},
"ySettings": {
"gflag": false,
"name": "green",
"type": "B"
},
"zSettings": {
"gflag": true,
"name": "red",
"type": "A"
}
}
现在,我尝试只获取(过滤)那些gflag字段为真的设置。
与上面的示例项类似,它应该只返回“mSettings”和“zSettings”节点
下面是我的示例代码:
var AWS = require('aws-sdk');
let region = "us-east-1";
AWS.config.region = region;
var docClient = new AWS.DynamoDB.DocumentClient();
let settingsItem = ["mSettings", "xSettings", "ySettings", "zSettings"];
let params = {
TableName: "mysettings",
KeyConditionExpression: "#pk = :pk AND #sk = :sk",
ExpressionAttributeNames:{
"#pk": "pk",
"#sk": "sk"
},
// FilterExpression : "ySettings.gflag = :gflag",
ExpressionAttributeValues: {
":pk": 'Group1',
":sk": 'A1000',
":gflag" : true
}
};
//for(let settings in settingsItem){
// params['FilterExpression'] = settingsItem[settings] + ".gflag = :gflag";
//}
console.log('params = ', params)
docClient.query(params, function(err, data){
if(err){
console.log(err)
}
console.log('data = ', data)
})
请建议仅检索那些标志值为true的对象。DynamoDB过滤器在项目级别运行。它们决定是否将项目返回给您。它们不能用于控制返回给您的属性组。您可以在客户端轻松地使用查询结果完成这项工作 下面是一个后处理查询结果对象以删除子对象的示例,其中
gflag
不正确:
const _ = require('lodash');
function gflag_true(value, key) {
return _.isObject(value) && value.gflag;
}
const item = {
"mSettings": { "gflag": true, "name": "green", "type": "B" },
"pk": "Group1",
"sk": "A1000",
"xSettings": { "gflag": false, "name": "blue", "type": "A" },
"ySettings": { "gflag": false, "name": "green", "type": "B" },
"zSettings": { "gflag": true, "name": "red", "type": "A" }
}
// transform item returned from DocumentClient query method
const rc = _.pickBy(item, gflag_true)
这导致:
{
mSettings: { gflag: true, name: 'green', type: 'B' },
zSettings: { gflag: true, name: 'red', type: 'A' }
}