我在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格式的字符串中。
我该怎么做?
答案 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。 希望这会有所帮助。