2016-05-19 18 views
5

mam pewne elementy, które mogę wstawić tak:DynamoDB: Jaka jest różnica, czy ustawiam atrybut na "NULL": "true", czy po prostu go pomijam?

PutItem:

"TableName": "pets", 
"Item": { 
    "petName": { 
     "S": "Cat" 
    }, 
    "hairColor": { 
     "S": "gray" 
    }, 
    "nickName": { 
     "S": "Kitty" 
    } 
} 

Czasami jednak pets nie posiada nickname. Jestem całkiem nowy dynamoDB, i widzę, że mogę sobie z tym poradzić na dwa sposoby (co najmniej):

1)

"TableName": "pets", 
"Item": { 
    "petName": { 
     "S": "Cat" 
    }, 
    "hairColor": { 
     "S": "gray" 
    }, 
    "nickName": { 
     "NULL": "true" 
    } 
} 

2)

"TableName": "pets", 
"Item": { 
    "petName": { 
     "S": "Cat" 
    }, 
    "hairColor": { 
     "S": "gray" 
    } 
} 

co za różnica Czy to będzie dla mnie (np. podczas uzyskiwania dostępu do danych później)? A jaka jest najlepsza praktyka?

Odpowiedz

1

Ustawienie atrybutu na "NULL" lub pominięcie go to nie to samo.

Jeśli w ogóle nie ustawisz atrybutu, to oczywiście nie istnieje on dla konkretnego elementu. Atrybut z typem danych "NULL" jednak istnieje, ale nie zawiera żadnej wartości (podobnej do null w JSON).

E.g. podczas porównywania z operatorem porównania NULL atrybut z właściwością "NULL" będzie faktycznie fałszywy. Nazewnictwo tutaj jest bardzo mylące, ale zachowanie jest dość well documented. Dla operatora porównania NULL mówi:

testy tego operatora na nieistnienie atrybutu, a nie jego danych typu. Jeśli typ danych atrybutu "a" ma wartość null, a użytkownik oceni to jako przy użyciu wartości NULL, wynikiem jest wartość false typu Boolean. Jest tak, ponieważ istnieje atrybut "a" ; jego typ danych nie jest odpowiedni dla operatora porównania NULL .

Powiązane problemy