我不知道为什么不运行这个项目。
@Data
@DynamoDBTable(tableName = "tableName")
public class entityName implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
private String id;
@DynamoDBRangeKey
private String rk;
private String sy;
}
Caused by: java.lang.IllegalArgumentException: No method or field annotated by @DynamoDBHashKey within type java.lang.String!
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBHashAndRangeKeyMethodExtractorImpl.<init>(DynamoDBHashAndRangeKeyMethodExtractorImpl.java:99) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.CompositeIdHashAndRangeKeyExtractor.<init>(CompositeIdHashAndRangeKeyExtractor.java:31) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.getHashAndRangeKeyExtractor(DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java:71) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.<init>(DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java:49) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityMetadataSupport.getEntityInformation(DynamoDBEntityMetadataSupport.java:125) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getEntityInformation(DynamoDBRepositoryFactory.java:104) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getDynamoDBRepository(DynamoDBRepositoryFactory.java:128) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getTargetRepository(DynamoDBRepositoryFactory.java:150) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:305) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:297) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.util.Lazy.getNullable(Lazy.java:211) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.util.Lazy.get(Lazy.java:94) …Run Code Online (Sandbox Code Playgroud) 我有一个这样的项目
{
"date": "2019-10-05",
"id": "2",
"serviceId": "1",
"time": {
"endTime": "1300",
"startTime": "1330"
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的设计方式是这样的:
primary key --> id
Global secondary index --> primary key : serviceId
--> sort key : date
Run Code Online (Sandbox Code Playgroud)
按照我现在的设计方式,
* I can query the id
* I can query serviceId and range of date
Run Code Online (Sandbox Code Playgroud)
我希望能够查询以便检索所有项目
* serviceId = 1 AND
* date = "yyyy-mm-dd" AND
* time = {
"endTime": "1300",
"startTime": "1330"
}
Run Code Online (Sandbox Code Playgroud)
我仍然希望能够根据前面的 2 个条件进行查询(按 id 查询,以及按 serviceId 和 rangeOfDate 查询
有没有办法做到这一点?我想的一种方法是创建一个新字段并将其用作索引,例如:合并所有数据,以便合并字段:“1_yyyy-mm-dd_1300_1330 …
database database-design nosql amazon-dynamodb dynamodb-queries
我有 2 个收藏:
用户收藏:
{
_id: ObjectId
}
Run Code Online (Sandbox Code Playgroud)
托托系列:
{
_id: ObjectId
fieldA: {_id: ObjectId}
fieldB: [{_id: ObjectId}, {_id: ObjectId}]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试加入 A 集合的元素,其中fieldA 的 id或fieldB 的 id之一与以下聚合的用户 id匹配:
db.users.aggregate([
{
$lookup: {
from: "Toto",
let: { "user_id": "$_id" },
as: "fcollection",
pipeline: [
{ $match:
{$or:[
{"fieldB": {$elemMatch: {"_id": "$$user_id"}}},
{$expr: {$eq :["$fieldA._id", "$$user_id"]}}
]}
}
]
}
])
Run Code Online (Sandbox Code Playgroud)
但在输出中,我只是获取了文档中 fieldA 的 id 匹配的位置,但没有获取 fieldB 的 id 匹配的位置。我究竟做错了什么?
假设在 AWS DynamoDB 中,我有一张表:
ID (Partition key, GSI's Sort Key) OtherAttribute Name (GSI's Partition Key)
0 1/1/2020 Alice
1 2/1/2020 Bob
2 3/1/2020 John
3 4/1/2020 Alice
4 5/1/2020 Bob
5 5/1/2020 Michael
Run Code Online (Sandbox Code Playgroud)
我的 GSI 投影了原始表的所有属性。
现在我想最终得到一个Set数据结构{“Alice”,“Bob”,“John”,“Michael”}。
我怎样才能实现这个目标?看来 Scan 操作本身无法选择唯一值,这意味着在我的情况下 Scan 操作无法变得更快,对吗?然后,在获得检索到的所有项目的列表后,我需要对此列表进行操作以提取 column 的唯一值Name,这是执行此操作的唯一方法吗?
因此我想我需要扫描整个表。这里还有一个问题就是,既然我的GSI投影了所有属性,那么扫描GSI还是只扫描原始表会有什么区别吗?我的目标当然是尽快完成这项工作。
有人可以提供一些建议吗?
谢谢!
任何人都使用https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html中所述的排序键实现了版本控制?
尝试使用打字稿来实现这一点,以构建包含项目版本的数据库。有没有什么方法可以使用 updateItem 来执行此操作,或者是否需要 get + put 操作?
非常感谢任何帮助我入门或帮助的示例!
amazon-web-services nosql amazon-dynamodb amazon-dynamodb-streams
我使用 firebase 实时数据库和express.js 作为后端。这是我的数据保存片段代码:
const db = require('./firebase_connection').firebaseDatabase
async function saveData(req, model) {
await db.ref(model).set(req)
return {"statusCode": "201", "message": "Inserted successfully"}
}
module.exports = { saveData }
Run Code Online (Sandbox Code Playgroud)
这是 json 输出:
{
"user" : {
"email" : "TEST77@TEST.com",
"full_name" : "Hossein Heydari",
"password" : "test",
"phone_number" : 54,
"role" : "client"
}
}
Run Code Online (Sandbox Code Playgroud)
但我还需要一个自动添加到数据库的Id,就像MongoDB有哪个是_id
我需要 firebase 为任何模型存储具有自动增量 Id 的数据,我该怎么办?
我尝试cqlsh在 AWS shell 中编写,但没有返回任何输出。我参考了这个教程
输出:-bash: cqlsh: command not found
amazon-web-services cassandra nosql wide-column-store amazon-keyspaces
调用 DynamoDB deleteItem API 时,出现The provided key element does not match the schema错误。经过研究,我发现当您没有提供完整的主键(即表有范围键但 API 调用未指定它)时,就会发生此错误。但是,就我而言,该表没有范围键,它只有一个名为 的哈希键pk。
这是我的代码:
const dynamodbDocClient = new AWS.DynamoDB.DocumentClient({ logger: console });
socket.on('my-event', async (payload) => {
await dynamodbDocClient.delete({
TableName: 'MyTable',
Key: { pk: payload.id },
}).promise()
})
Run Code Online (Sandbox Code Playgroud)
有人可以列出可能发生此错误的所有其他情况吗?
您好,我正在从系统设计的角度学习 NoSQL 数据库的功能,并且还了解到许多大公司使用分片 RDBMS 而不是那些 nosql 数据库来保存数据。
这是否表明 NoSQL 数据(Cassandra/MongoDB)的唯一优势是因为它是现成的分布式解决方案并且维护成本低廉?
我在聚合管道的第一阶段使用以下方法得到了这组结果$match:
[
{ a: 1, b: 2 },
{ a: 3, b: 4 }
]
Run Code Online (Sandbox Code Playgroud)
现在我想对所有 A 和 B 求和,并且仍然保留它们,因此我将得到如下结果:
{
total_sum: 10,
items: [...] // first and second objects ofcourse
}
Run Code Online (Sandbox Code Playgroud)
我尝试过$group,$push但是,push 只从对象中推送特定字段,我需要命名 A 和 B,而不是解析所有它们。
我该怎么做?
nosql ×10
mongodb ×3
cassandra ×2
database ×2
aggregation ×1
duplicates ×1
express ×1
firebase ×1
java ×1
node.js ×1
postgresql ×1
spring-data ×1