【问题标题】:Filtering a dynamoDB query with a global secondary index使用全局二级索引过滤 dynamoDB 查询
【发布时间】:2014-10-14 12:24:22
【问题描述】:

我正在使用全局二级索引来查询我的表,并希望能够根据其他属性过滤结果(SQL 等效项是 WHERE 子句))。扫描允许我这样做,但可以使用查询吗?我还可以采取哪些其他方法?

var params = {
                "IndexName": "City-index",
                "KeyConditions": {
                    "City": {
                        "AttributeValueList": [{
                            "S": city
                        }],
                        "ComparisonOperator": "EQ"
                    }

                },
                "Limit": "100",
                "TableName": "properties"
            }
            dynamoDB.query(params, function(err, data) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(data);
                }

            });

关于如何设计 TABLE 来实现的任何其他想法:

Hash Key: propertyID (unique)
Range Key: createdAt (unique

Global Secondary Indexes: City
Global Secondary Indexes: State

我希望能够按索引进行查询,然后按其他属性(卧室、浴室等)进行过滤

【问题讨论】:

    标签: javascript node.js amazon-dynamodb


    【解决方案1】:

    您需要查询的任何属性都需要成为 GSI - 您最多可以添加 5 个属性。您还需要注意它支持的查询类型(仅这些:EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN)

    如果您需要的不仅仅是这些查询,Dynamo 将无法提供帮助 - 可能需要切换到 RDS。如果可以将它们表述为文档,请考虑使用 Cloudsearch。

    【讨论】:

    • 感谢@Sony。那么,我可以一次查询超过 1 个 GSI 吗?我试过这个没有成功。我可以使用 5,但需要能够在同一个查询中通过多个索引进行查询。
    • 是的,我想您可以一次查询多个 GSI - 哈希键、(和/或范围键)和 GSI。
    • @Joe,如果这回答了你的问题,你能标记为正确答案吗?
    • @SonyKadavan 不,您不能一次查询多个 GSI,因为您只能指定一个索引表名称。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    相关资源
    最近更新 更多