我在dynamo DB中有以下数据
id category value rule
1 a 5 1
2 b 5 1
3 c 5 1
4 a 5 2
5 b 5 2
6 a 2 3
7 b 2 3
8 a 3 4
9 b 3 4
10 c 2 4
11 d 2 4
12 b 5 5
13 c 5 5
我的目标如下:
rule
的{{1}}。获得该规则后,请检查其中是否只有2
和a
。忽略其余部分。这是我当前的查询。
b
当我执行此操作时,它会返回规则var array=["a","b"];
for (index = 1; index <= 5; ++index) {
console.log(index);
var params1 = {
TableName: "MyCatTable",
FilterExpression: "#rule=:rule",
ExpressionAttributeNames: {
"#rule": "rule"
},
ExpressionAttributeValues: {
":rule": String(index)
}
};
results.push(dynamodb.scan(params1).promise().then(function (data) {
if (data.Items.length == 2 && (array.indexOf(data.Items[0].category) >= 0)) {
var uw = data.Items;
return uw;
}
}));
}
return Promise.all(results);
}).then((data) => {
var res;
console.log("----------------------");
console.log(data);
})
,2
和3
。但我只需要5
和2
。由于3
有5
和b
而不是c
和a
。
还是有其他方法来过滤掉我得到的json响应吗?
请让我知道我哪里出错了,我该如何解决这个问题。
由于
答案 0 :(得分:1)
问题在于这部分代码:
data.Items[0].category
它只检查&#34; data.Items&#34;上的第一个元素的类别。数组,您需要通过检查每个元素的类别而不是第一个元素的类别来过滤数组。返回5的原因是因为5的第一个元素是&#39; b&#39;它存在于你的数组中。
*已编辑 - 请求的代码片段(这应该是代码应该如何看的大致轮廓。虽然可能有一些错误)
if (data.Items.length == 2) {
var uw = [];
for(var x in data.Items){
if(array.indexOf(x.category) >= 0) uw.push(x);
}
return uw;
}