Java 如何在dynamodb中应用列表类型字段中的搜索?
我们在mongodb存储库中使用$all,如下所示:Java 如何在dynamodb中应用列表类型字段中的搜索?,java,spring-data,amazon-dynamodb,Java,Spring Data,Amazon Dynamodb,我们在mongodb存储库中使用$all,如下所示: @Query(value = "{ 'subscriptions' : {$all : ?0 }}") public List<ContentItem> findBySubscription(String[] subscriptionCode); @Query(value=“{'subscriptions':{$all:?0}”) 公共列表findBySubscription(字符串[]subscriptionCode);
@Query(value = "{ 'subscriptions' : {$all : ?0 }}")
public List<ContentItem> findBySubscription(String[] subscriptionCode);
@Query(value=“{'subscriptions':{$all:?0}”)
公共列表findBySubscription(字符串[]subscriptionCode);
它适用于mongo,但我们需要在dynamodb中使用它的替代方案,下面的解决方案使用AWS SDK dynamodb。目前,我认为只有社区版的Spring数据可用于DynamoDB。因此,我使用AWS SDK提供了解决方案 比较运算符可用于搜索列表数据类型中的值 列表支持包含:计算“a包含b”时,“a” 可以是一个列表;但是,“b”不能是集合、映射或列表 示例:-
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("yearkey = :yearval and title = :title")
.withFilterExpression("contains (subscriptions, :subscriptions)")
.withValueMap(
new ValueMap().withNumber(":yearval", yearKey)
.withString(":title", title)
.withString(":subscriptions", subscriptions));
编辑:-
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("yearkey = :yearval and title = :title")
.withFilterExpression("contains (subscriptions, :subscriptions)")
.withValueMap(
new ValueMap().withNumber(":yearval", yearKey)
.withString(":title", title)
.withString(":subscriptions", subscriptions));
目前,第二个参数不能是list,因为API不能按照规范处理它。解决方法是将和条件与多个包含一起使用。示例如下:-
.withFilterExpression("contains (subscriptions, :subscriptions1) AND contains (subscriptions, :subscriptions2)")
在我的情况下,b也是一个列表。我需要找到$all MongoDb的替代品。请提出建议。谢谢@onceptquest如果答案有帮助,请接受好吗?