困惑创建DynamoDB查询

时间:2018-01-16 06:16:27

标签: json amazon-dynamodb

我在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

我的目标如下:

  1. 首先扫描表格,然后获取尺寸为rule的{​​{1}}。获得该规则后,请检查其中是否只有2a。忽略其余部分。
  2. 这是我当前的查询。

    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); }) 23。但我只需要52。由于35b而不是ca

    还是有其他方法来过滤掉我得到的json响应吗?

    请让我知道我哪里出错了,我该如何解决这个问题。

    由于

1 个答案:

答案 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;
        }