gpt4 book ai didi

android - 通过排序从 dynamoDB 中获取项目

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:08 24 4
gpt4 key购买 nike

在我的项目中,我想从表中获取所有记录,并按 created_date 降序排序。我还想添加获取所有项目的条件,而不是 created_by 登录用户。我尝试了很多方法,但无法实现。

下面是我的表结构。 dynamodb table structure

这是我从 dynamoDB 中获取记录的 java 代码。

Map<String, Condition> filter = new HashMap<String, Condition>();
//filter.put(RealmConstant.Expo.created_by, new Condition().withComparisonOperator(ComparisonOperator.NE).withAttributeValueList(new AttributeValue().withS(userId)));
filter.put(RealmConstant.Expo.created_date, new Condition().withComparisonOperator(ComparisonOperator.LE.toString()).withAttributeValueList(new AttributeValue().withS(""+new Date())));

Expo expo =new Expo();
expo.setCreated_by(userId);

DynamoDBQueryExpression<Expo> queryExpression = new DynamoDBQueryExpression<Expo>();
queryExpression.setHashKeyValues(expo);
queryExpression.setIndexName(AppConstant.DynamoDBTableIndex.created_by_created_date_index);
queryExpression.setConsistentRead(false);
queryExpression.setRangeKeyConditions(filter);

queryExpression.setScanIndexForward(false);
return mapper.query(Expo.class, queryExpression);

按照上面的代码,我得到了我创建的所有记录。我想获取所有不是我创建的记录。

也试过.withFilterExpression("created_by <> :val1").withExpressionAttributeValues(eav);但没有工作。正如已经发布的问题。 Why is there no **not equal** comparison in DynamoDB queries?

DynamoDB: Filter Expression can only contain non-primary key attributes

最佳答案

简短的回答是,您无法按任何属性按排序顺序从 DynamoDB 表中获取*所有项目。 DynamoDB 并不是那样工作的。

将 DynamoDB 视为列表的分布式 HashMap 。

就像您不能期望能够从这样的列表映射中获得全局排序的结果一样,您也无法从 DynamoDB 中获得它们。

您可以扫描整个表,甚至过滤掉一些不需要的结果,但是对于排序,您需要在获取记录后进行。

您可以做的是按顺序或排序键检索具有相同分区键的项。

您可以创建一个索引,您可以在其中选择一个任意属性作为分区键,另一个作为排序键,但即使是这种方法也有一些局限性。

最好的方法是真正花一些时间思考您将如何处理这些数据。为什么要尝试按排序顺序从表中检索所有项目?也许有更好的方法来组织您的数据,这样您就不需要检索所有数据。

关于android - 通过排序从 dynamoDB 中获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49666217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com