使用和/或不使用类型的AWS DynamoDB数据?

时间:2017-12-06 13:49:53

标签: javascript node.js amazon-web-services amazon-dynamodb

我使用NodeJS的aws-sdk与DynamoDB表进行交互。这是我第一次看到DynamoDB。

使用getItem()updateItem()等调用时,数据结构包含类型,如下所示:

{
  'a': { S: 'My string' }
}

有没有办法在没有类型的情况下传递和接收这些对象..?所以......

{
  'a': 'My string'
}

或者,已编写的任何辅助函数都会将对象转换为此格式的对象..?

const data = dbToObj({ 'a': { S: 'My string' } })
// { 'a': 'My string' }

所以我可以在填充call params时转换为它,并在接收数据时从它转换。

尽量避免访问我的数据,如:

const myData = data.Item.something.M.somethinElse.M.qwerty.S

我知道我可以自己写一些东西,只是想知道是否有人知道已经可以使用的功能/选项。我找不到任何东西。

4 个答案:

答案 0 :(得分:4)

发现这个:

正是我在寻找的东西。

安装:unwrap({ 'a': { S: 'My string' } })

提供aws-sdkawslabs方法,用于与普通对象进行转换。

<强>更新

我现在也发现了这个:AWS.DynamoDB.DocumentClient,它是for的一部分。

  

文档客户端通过抽象出属性值的概念,简化了在Amazon DynamoDB中处理项目的过程。此抽象注释作为输入参数提供的本机JavaScript类型,以及将带注释的响应数据转换为本机JavaScript类型。

更新2

这是由亚马逊在for phrase in set(phrases).intersection(text.split()): ... github页面下进行的:

Amazon DynamoDB Automarshaller

  

此库提供Marshaller类,可将本机JavaScript值转换为DynamoDB AttributeValues,然后再返回。它设计用于处理集合,映射和迭代等ES6功能,并且可以配置为支持仅由JavaScript支持的数据类型(例如空二进制缓冲区)或Amazon DynamoDB支持的数据类型(例如任意大小的数字)最小的权衡。

这是DynamoDB DataMapper For JavaScript套餐的一部分。

答案 1 :(得分:0)

Dynogels提供了一种更清晰的处理方式,无需担心类型。 我们在生产中使用它并且没有任何问题。

https://github.com/clarkie/dynogels

Account.create({email: 'foo@example.com', name: 'Foo Bar', age: 21}, function (err, acc) {
  console.log('created account in DynamoDB', acc.get('email'));
});

它是dynamodb的ODM(对象数据映射器)。

希望它有所帮助。

答案 2 :(得分:0)

Dynamoose是另一种可以抽象更多无关代码的建模工具。 github是here。我认为它建立在AWS文档客户端之上,尽管我还没有做太多挖掘。

答案 3 :(得分:0)

我们将dynamo-easy与打字稿一起用于我们的生产应用程序。 (直接从浏览器或Lambda函数内部)

它提供了从JS到DynamoDB类型的映射,还为请求API提供了一些不错的抽象。

   import Web3 from 'web3'

    export const startMetaMask = () => {

        if (window.ethereum) {
            web3 = new Web3(window.ethereum);
            try {
                window.ethereum.enable().then(function() {

                });
            } catch (e) {}
        }

        else if (window.web3) {
            web3 = new Web3(web3.currentProvider);
        }

        else {
            alert('You have to install MetaMask !');
        }
    }

全面披露:我是图书馆的作者之一