DynamoDb - 根据DynamoDBDocument集合中的属性进行筛选或扫描

时间:2017-01-27 19:26:19

标签: amazon-dynamodb

我想知道是否可以根据DynamoDBDocuments集合中的属性进行过滤/扫描。让我说我有这个:

@DynamoDBTable(tableName = "Orders")
public class Order {
    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    private String id;

    @DynamoDBAttribute
    @DynamoDBTypeConverted(converter = LocalDateTimeConverter.class)
    private LocalDateTime orderDate;

    @DynamoDBAttribute
    private Address shipTo;

    @DynamoDBAttribute
    private Address billTo;

    @DynamoDBAttribute
    private List<OrderItem> items;
}

@DynamoDBDocument
public class Address {
    private String name;
    private String street;
    private String city;
    private String state;
    private String zip;
}

@DynamoDBDocument
public class OrderItem {
    private String product;
    private int qty;
    private double itemCost;
}

让我们假设我想找到所有包含一个或多个产品的订单,其中产品是&#34;小部件&#34;。我相信答案是否定的。使用关系数据库,我会这样做: SELECT o FROM Orders o,OrderItems i WHERE o.id = i.id AND i.product =&#34; widgets&#34;

更好的做法是将订单商品放在自己的表中并在其中包含orderId属性,然后根据产品查询订单商品,然后根据订单ID获取订单?

1 个答案:

答案 0 :(得分:0)

如果您使用地图而不是@DynamoDBAttribute items的列表,其中地图的键是product,那么您可以使用过滤器表达式attribute_exists(items.widgets)进行下选。