标签: documentclient

动态数据库 | 批量获取 | 以与提供的键相同的顺序获取结果

我正在使用 AWS DynamoDB 来存储用户。

考虑以下代码:

let params = {
  RequestItems: {
    'users': {
       Keys: [
        {id: '1111'},
        {id: '2222'},
        {id: '3333'},
        {id: '4444'},
        ]
        }
      }
    };
Run Code Online (Sandbox Code Playgroud)

在 BatchGet 中使用上述参数将返回被请求的用户,但顺序是随机的!

问题:是否可以在不丢失 Keys 中定义的顺序的情况下 BatchGet 用户?

amazon-web-services amazon-dynamodb documentclient

7
推荐指数
2
解决办法
2725
查看次数

当嵌套路径不存在时 DynamoDB 更新失败

我的表结构如下,其中time唯一键是唯一键,“01”是计数的 id,一个月的项目将在任何 id 获得该月的计数结果后立即创建。

{
  "details": {
    "01": {
      "a": {
        "count": [10, 5]
      },
      "b": {
        "count": [10, 5]
      }
    }
  },
  "time": "2020_06"
}
Run Code Online (Sandbox Code Playgroud)

我使用更新函数来保存计数结果:

var params = {
  TableName: tableName,
  Key: { time },
  UpdateExpression: `ADD details.#id.#type.count[0] :count0, details.#id.#type.count[1] :count1`,
  ExpressionAttributeNames: {
    '#id': id,
    '#type': type
  },
  ExpressionAttributeValues: {
    ':count0': count[0],
    ':count1': count[1]
  },
  ReturnValues: 'ALL_NEW'
}
Run Code Online (Sandbox Code Playgroud)

如果 id 的结果已经存在那就没问题了。但如果没有,我会收到一个错误消息

ValidationException: The document path provided in the update expression is invalid for update
Run Code Online (Sandbox Code Playgroud)

如何让地图先构建好再更新数据?我曾尝试使用SET …

javascript amazon-dynamodb dynamodb-queries documentclient

6
推荐指数
1
解决办法
896
查看次数

在 Node 中使用 DynamoDB.DocumentClient 检索 StringSet 值

DynamoDB.DocumentClientJavaScript 类型之间的自动编组和解组值是 DynamoDB 更具描述性的AttributeMap类型。但是,在处理具有StringSet属性的 Item 时,它似乎不会自动进行转换。

使用 向StringSet表添加属性时DocumentClient,我使用该createSet(...)方法将数组转换为集合。取回值时, 的倒数是createSet(...)什么?.values直接访问 Set 的最佳做法是什么?如果是这样,是否记录在某处?

这是添加具有StringSet属性的 Item 的示例代码,然后检索该项目:

    const docClient = new DocumentClient();
    const TableName = "StringSets-Example";
    const PK = "Names";
    const Values = ["Peter", "Paul", "Mary"];

    const putParams = {
        TableName,
        Item: {
            PK,
            names: docClient.createSet(Values)
        }
    }
    await docClient.put(putParams).promise();

    // ... some time later, I can retrieve the value with ...

    const getParams = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-dynamodb documentclient

6
推荐指数
1
解决办法
588
查看次数

如何使用DocumentDb单元测试的筛选器模拟DocumentClient CreateDocumentQuery?

我正在为下面的代码编写单元测试,这些代码使用带有where(filter)条件的Document客户端CreateDocumentQuery方法。

 var documentQuery = ReadOnlyDocumentClient.CreateDocumentQuery<MyView>(UriFactory.CreateDocumentCollectionUri(Constants.COSMOS_DB_NAME, Constants.MY_VIEW_COL_NAME))
                                                       .Where(w => w.Name== query.Name)
                                                       .Where(w => w.DOB> query.StartDate && w.DOB < query.EndDate)
                                                       .AsDocumentQuery();
Run Code Online (Sandbox Code Playgroud)

查询是一个命令参数,它是一个输入。

我正在使用最小起订量进行模拟,并且正在使用以下代码行进行模拟

 mockDocumentClient.Setup(s => s.CreateDocumentQuery<MyView>(It.IsAny<Uri>(), It.IsAny<FeedOptions>())).Returns(mockDocumentQuery.Object);
Run Code Online (Sandbox Code Playgroud)

现在,上面的代码仅模拟CreateDocumentQuery,执行条件时,我没有得到模拟支持。

请提出如何在哪里条件下模拟CreateDocumentQuery?

提前致谢。

c# unit-testing documentclient

5
推荐指数
1
解决办法
472
查看次数

为什么“documentClient.put”在 DynamoDB 中执行 UPDATE 而不是 INSERT?

我有一个简单的逻辑,我想INSERT使用 记录在表中AWS.DynamoDB.DocumentClient。下面是我正在使用的代码。在这里,我注意到.put正在更新记录,但不知道为什么。

在检查 CW 中的日志时,我没有看到任何错误,所以不确定我在这里错过了什么。

代码:

async addEvent(incomingModel: MyModel): Promise <MyModel> {
    const dynamoModel: MyModel = {
        fieldOne: incomingModel.fieldOne,
        fieldTwo: incomingModel.fieldTwo,
        "One#two#three": `${incomingModel.one}#${incomingModel.two}#${incomingModel.three}`,
        fieldThree: incomingModel.fieldThree,
        fieldFour: incomingModel.fieldFour,
    };

    var params = {
        TableName: 'Table',
        Item: dynamoModel,
    };

    return this.documentClient
        .put(params)
        .then((data) => {
            this.logger.debug(
                "Response received from Dynamo after adding an incomingModel",
                data,
                this.constructor.name,
            );

            return data as MyModel;
        })
        .catch((error) => {
            const errorMessage = JSON.stringify(error);
            this.logger.error(
                `Error creating incomingModel with body of …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-dynamodb typescript documentclient

3
推荐指数
1
解决办法
4530
查看次数

从 dynamodb 中删除项目时清空数据对象

根据文档,我应该在删除之前获取包含该项目的数据结构(如果没有错误)
我确实检查没有错误,但我得到了一个空对象data

    docClient.delete(params, (err, data) => {
    if (err) {
        console.error('Error tring to delete item:' + err);
        callback(err, null); // error
    } else if (!data.Items || data.Items.length == 0) {
        console.info(JSON.stringify(data));
        callback(null, null); // no items
    } else  {
        console.info(JSON.stringify(data));
        callback(null, data.Items[0].ExposeStartTimestamp);
    }
});
Run Code Online (Sandbox Code Playgroud)

两者都打印空的 json: {}

node.js amazon-dynamodb aws-sdk-nodejs documentclient

1
推荐指数
1
解决办法
1325
查看次数