模式中的Dynamoose地图列表

时间:2017-12-07 07:31:44

标签: amazon-dynamodb dynamoose

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

我试图像这样描述:

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格式的字符串中。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

好的,所以我遇到了类似的问题,我终于设法解决了它只针对具有特定结构的地图,即所有条目都是相同类型的,通过查看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,但如果对象完全随机,我不确定您是否能够在发电机中执行您想要的操作。

如果其他所有方法都失败了,你总是可以回到原始的aws-sdk。 希望这会有所帮助。