2017-12-07 5 views
3

Ich habe in meiner Datenbank DynamoDB eine Tabelle, die ein Element als Liste der Karten enthält. Jedes Map-Element hat keine spezifische Struktur.Dynamo Liste der Karten im Schema

Ich habe versucht, es so zu beschreiben:

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 
}) 

jedoch jedes Element in Inhalt gleich zu {}. Ich bin in der Lage, die Daten beim Wechsel von list: [Map] zu list: [String], aber ich möchte es in JSON nicht in einer Zeichenfolge mit DynamoDB Json-Format haben.

Wie kann ich das tun?

+0

Hier ist Ihre Lösung https://stackoverflow.com/questions/45695830/dynamodb-list-type –

Antwort

0

Ok, also war ich mit einem ähnlichen Problem konfrontiert, das ich schließlich nur für Karten mit einer bestimmten Struktur gelöst habe, das heißt, dass alle Einträge vom selben Typ sind, indem man in den Tests nach Dynamoose und Training sucht die Syntax. Der folgende Code speichert addressHeld als eine Liste von Maps in dynamodb.

Sie können aus dem Scan sehen, dass Sie ein Array von Objekten auf Abfrage zurück erhalten.

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); 
}); 

Sie können eine Liste von Karten speichern, aber dynamoose weiß nicht, was mit ihnen zu tun, damit es sie als Strings speichert, wird dies durch die Einstellung der Liste Typ ‚Objekt‘ acheived ist

Sie Ich könnte mir attributeToDynamo in der API ansehen, aber wenn die Objekte völlig zufällig sind, bin ich mir nicht sicher, ob Sie in der Lage sein werden, das zu tun, was Sie in dynamoose wollen.

Sie könnten immer auf die rohe AWS-SDK zurückgreifen, wenn alles andere fehlgeschlagen wäre. Hoffe, das hilft.