4

我在我的 DynamoDB 数据库中有一个表,其中包含一个元素作为地图列表。每个地图项没有任何特定的结构。

我试图这样描述它:

const schema = new dynamoose.Schema({
  Id: {
    type: String,
    hashKey: true,
    required: true
  },
  Name: {
    type: String,
    required: true
  },
  Content: {
    type: 'list',
    list: [Map]
  }
},
{
  useNativeBooleans: true,
  useDocumentTypes: true,
  saveUnknown: true
})

但是,Content 中的每个项目都等于 {}。list: [Map]更改为时,我可以检索数据list: [String],但我希望将其保存在 Json 中,而不是包含 DynamoDB Json 格式的字符串中。

我怎样才能做到这一点?

4

1 回答 1

2

好的,所以我遇到了类似的问题,我最终设法仅针对具有特定结构的地图解决了该问题,即通过查看 dynamoose 的测试并计算出语法,所有条目都属于同一类型。以下代码将 addressHeld 保存为 dynamodb 中的地图列表。

您可以从扫描中看到您在查询中返回了一组对象。

var Address = dynamoose.model('Address', {
    HouseNumber: {
        type: Number,
        hashKey: true
    },
    Postcode: {
        type: String,
        rangeKey: true
    }
}, { useDocumentTypes: true });

var dogSchema = new dynamoose.Schema({
    ownerId: {
        type: Number,
        hashKey: true
    },
    address: {
        type: 'list',
        list: [
            {
                HouseNumber: { type: Number, require: true },
                Postcode: { type: String, require: true },
            }
        ],
        require: true
    },
}, { useDocumentTypes: true });

var Dog = dynamoose.model('Dog', dogSchema, options);

var Address1 = new Address(
    {
        HouseNumber: 1,
        Postcode: "LS114RF"
    });
var Address2 = new Address(
    {
        HouseNumber: 2, Postcode: "NN22NX"
    });

var odie = new Dog({
    ownerId: 1,
    address: [Address1, Address2]
});

odie.save(function (err) {
    if (err) { return console.log(err) }
    console.log('Ta-da!');
});


Dog.scan().exec((err, dog) => {
    console.log(dog);
});

您可以保存地图列表,但 dynamoose 不知道如何处理它们,因此它将它们存储为字符串,这是通过将列表类型设置为“对象”来实现的

您可以查看 api 中的 attributeToDynamo,但如果对象是完全随机的,我不确定您是否能够在 dynamoose 中做您想做的事情。

如果一切都失败了,你总是可以退回到原始的 aws-sdk。希望这可以帮助。

于 2018-02-17T23:44:26.873 回答