我在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
size 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
和b
。
还是有其他方法可以过滤掉我得到的json响应?
请让我知道我要去哪里错了,我该如何解决。
谢谢
问题出在这部分代码上:
data.Items[0].category
它仅检查“ data.Items”数组上第一个元素的类别,您需要通过检查每个元素的类别而不是仅检查第一个元素来过滤数组。返回5的原因是因为5的第一个元素是数组中存在的'b'。
*编辑-根据要求的代码片段(这应该是代码外观的粗略轮廓,但是可能会有一些错误)
if (data.Items.length == 2) {
var uw = [];
for(var x in data.Items){
if(array.indexOf(x.category) >= 0) uw.push(x);
}
return uw;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句