首页 > 解决方案 > DynamoDB 与 NodeJS - 获取 ID 不等于第一个查询结果的元素列表

问题描述

我目前正在使用 NodeJS 学习 DynamoDB。我正在做一个以“userId”为参数的函数。

我将查询 dynamoDB 并使用参数“userId”获取这个用户,这很有效。

这是我获取用户的查询:

let params = {
    TableName: 'user',
    KeyConditionExpression: "#id = :userId",
    ExpressionAttributeNames:{
        "#id": "id"
    },
    ExpressionAttributeValues: {
        ":userId": userId
    }
};

docClient.query(params, function (err, data) {
    if (err) {
        res.send({
            success: false,
            message: err.message
        });
    } else {
        const {Items} = data;
        if (Items.length === 0) {
            res.send(null)
        }
        else res.send(Items);
    }
});

这是找到用户时的查询结果:

[{
    "firstname": "test",
    "lastname": "test",
    "password": "test",
    "id": "1750",
    "email": "test@test.com",
    "habitsList": [
        {
           id: 10
        },
        {
           id: 12
        }
    ]
}]

所以,在dynamo找到用户之后,我希望它得到ID不等于“10”和“12”的所有习惯

我可以通过对查询/参数进行一些更改来做到这一点,还是我绝对必须做另一个查询,将 IDS 列表作为参数传递?

谢谢

标签: node.jsamazon-dynamodbdynamodb-queries

解决方案


如果我的问题正确,这意味着您想要用户对象,但习惯被过滤为不是 id = 10 或 12。如果是这种情况,我认为在查询后过滤习惯会更容易。

for(var i = 0; i < Items.length; i++){
    var filteredHabits = Items[i].habitsList.filter(h => h.id !== 10 && h.id !== 12);
    var Items[i].habitsList = filteredHabits; //this will replace the current habitList to filteredHabit
}

推荐阅读