Mapping Concept

Depending on the value type or the meta data provided from decorators, values are mapped to DynamoDB attributes.

As long as there are no decorators the mapper decides by the value type, to which DynamoDB attribute type it will map.

We map all properties (Object.getOwnPropertyNames(objectToMap)) by default. Use the @Transient decorator to prevent a property from being mapped.

Empty Values

(null & undefined) are treated as empty values and are not mapped to an attribute value.

JS value
{
    "name": null,
    "age": 23,
    "nationality": undefined
}
DynamoDB value
{
    "age": {N: "23"} 
}

Without Decorator

JS Type

Mapped DynamoDB type

boolean

[BOOL]

string

[S]tring

number

[N]umber

Array

[L]ist

Set<number>

Set<string>

Set<Binary*>

[N]umber[S]et

[S]tring[S]et

[B]inary[S]et

Mixed item types are

only supported with

decorator (see below)

Object

[M]ap

*Binary is not yet supported

With Decorator

JS Type + CollectionProperty decorator

DynamoDB Type

@CollectionProperty()

Set<string | number>

[L]ist

only list supports different types

@CollectionProperty({ sorted: true })

Set<string>

[L]ist

only list preserves the order

@CollectionProperty({ sorted: true })

Set<number>

[L]ist

only list preserves the order

@CollectionProperty({ itemType: CustomType* })

Set<CustomType>

[L]ist

only makes sense when CustomType is @Model decorated - will be used for mapping

@CollectionProperty({ itemType: CustomType* })

Array<CustomType>

[L]ist

only makes sense when CustomType is @Model decorated - will be used for mapping

@CollectionProperty({itemMapper:CustomTypeMapper})

Set<CustomType>

[(N|S|B)S]et

itemMapper must return N|S|B - Attribute

*If CustomType is string|number|Binary, it will be mapped to the respective [S]et

Generic information is never available due to some serialization limitations of the typescript compiler. Therefore you can provide the itemType to the @CollectionProperty decorator.

Last updated

Was this helpful?