2015-12-02 11 views
10

Mam następujący przykład listy:Jak usunąć z listy map DynamoDB, według wartości atrybutu Mapa na tej liście?

{ 
    "favorites": [ 
    { 
     "createdAt": 1448998673852, 
     "entityId": "558da3de395b1aee2d6b7d2b", 
     "type": "media" 
    }, 
    { 
     "createdAt": 1448998789252, 
     "entityId": "558da3de395b1aee2d6b7d83", 
     "type": "media" 
    }, 
    { 
     "createdAt": 1448998793729, 
     "entityId": "558da3de395b1aee2d6b7d99", 
     "type": "media" 
    }, 
    { 
     "createdAt": 1448998813023, 
     "entityId": "558da3de395b1aee2d6b7daf", 
     "type": "media" 
    } 
    ], 
    "userId": "2" 
} 

I chcę, aby usunąć mapę z: "entityId": "558da3de395b1aee2d6b7d2b".

myślę zapytania UpdateItem, Mam spojrzał na dokumentacji ekspresji remove (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html), ale nie wydaje się zobaczyć jakieś przykłady, poza usuwanie elementów z listy poprzez wartości indeksu ....

+0

Mam podobny problem. Czy wymyśliłeś rozwiązanie tego problemu? –

+0

Ditto. Mam też kłopoty. – ephemeralCoder

Odpowiedz

-1

Powinieneś zdeszystrować obiekt do czegoś, z czym możesz pracować, modyfikując go, aby usunąć ten wpis, a następnie używając elementu update, aby zapisać zmiany.

Nie jestem użytkownikiem node.js, ale w jaki sposób utworzyłeś obiekt w pierwszej kolejności? Czy robisz ręcznie ciąg jsonów? Jeśli tak, nie powinieneś. Istnieją biblioteki obsługujące json i ułatwiające ich modyfikowanie, a następnie otrzymywanie wynikowego łańcucha json ze zmianami.

How to parse JSON using Node.js?

+1

Problem z sugerowanym podejściem polega na tym, że nie jest on atomowy. Jeśli dwóch klientów czyta przedmiot w tym samym czasie, gdy obydwoje piszą przedmiot z powrotem, jedna z tych zmian zostanie utracona. – sheldonh

+0

To nie odpowiada na pytanie o usunięcie przedmiotu z listy w DynamoDB przez charakterystykę inną niż pozycja na liście. – Juriy

1

Zabrakło mi do tego problemu kilka razy i niestety nie ma prostego rozwiązania. Dwa najczęściej spotykane sposoby obejścia tego problemu to:

A. użyj mapy zamiast listy, możesz odwołać się do ulubionego bezpośrednio w wyrażeniu aktualizacji teraz, używając #favorites.#entityId. Jeśli zamówienie jest ważne, dodaj atrybut zamówienia do każdej mapy. W warstwie dostępu do danych znajduje się miejsce, w którym należy wykonać konwersję do/od żądanego typu tablicy.

{ 
    "userId": "2", 
    "favorites": { 
    "558da3de395b1aee2d6b7d2b": { 
     "createdAt": 1448998673852, 
     "entityId": "558da3de395b1aee2d6b7d2b", 
     "type": "media", 
    }, 
    // ... more entities here 
    } 
} 

B. używać jeden-do-wielu tabel zamiast zobaczyć http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForItems.html

0

Zrobiłem to już wcześniej w Pythonie przy użyciu biblioteki Boto3 ale nie w JavaScript. Mam link do funkcji obiektu JavaScript delete. To, co zrobiłem w Pythonie, polegało na tym, że I queried mój stół dla przedmiotu (ów) i utworzyć listę podstawowych kluczy obiektów, które chciałem usunąć i nazwał funkcję usuwania.

Powiązane problemy