Mam bardzo ogólną implementację klasy bazy danych w mojej aplikacji.

Chciałbym nakarmić dwie rzeczy do aktualizacji dynamodb AWS: id i data {...} do aktualizacji.

Widzę jednak tylko następującą metodę podobną do SQL w dokumentach:

{
    TableName: "Music",
    Key: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression: "SET RecordLabel = :label",
    ExpressionAttributeValues: {
        ":label": "Global Records"
    }
}

Czy nie ma takiej możliwości, aby zrobić to bardziej styl mongodb, bez konieczności napisania zapytań? Szukałbym więcej w coś takiego:

{
    TableName: "Music",
    Key: {
        "id":"123-random-id"
    },
    Item: { "label": "Global Records" }
}

Niestety, gdy to nie powiedzie się, nie aktualizuje nic.

0
Kevin Van Ryckegem 14 marzec 2021, 01:13

2 odpowiedzi

Najlepsza odpowiedź

Nie jestem wystarczająco znany z MongoDB, aby porównać składnię zapytania do DynamodB. Jeśli jednak dobrze rozumiem twoje pytanie, pytam, czy nie ma prostszego sposobu pracy z API Dynamodb. W moim doświadczeniu odpowiedź na to pytanie jest dobrze, nie korzystając bezpośrednio z SDK AWS bezpośrednio.

W społeczności istnieje kilka wysiłków, aby zbudować narzędzia, które sprawia, że interakcja z Dynamodb czuje się bardziej naturalna. Dynamodb Toolbox jest jednym z takich wysiłku, które działały dla mnie, chociaż nie ma cię nie osuszyć Zrozumienie składni wyrażeń dynamodb.

Na przykład, dzięki Dynamodb Toolbox, przykładowy fragment kodu może być napisany jako:

let item = {
   id: "123-random-id",
   label: "Global Records",
}
await MyEntity.update(item)
1
Seth Geoghegan 14 marzec 2021, 15:58

Nie wyjaśnisz, co miałeś nadzieję Item: { "label": "Global Records" } zrobiłby:

Jeśli chcesz zastąpić element Cały , możesz zrobić z Putitem.

Jednakże, jeśli chciałbyś zrobić, to zastąpić atrybut {X0}}} i nie dotykaj żadnego z innych istniejących atrybutów elementu, naprawdę musisz użyć UpdateItem jak ty . Możesz użyć składni UpdateExpression, jak to zrobiłeś - co nie jest zbyt trudne, szczerze - ale istnieje również starsza składnia AttributeUpdates, który można podoba lepiej, ponieważ wystarczy zdefiniować atrybuty, które chcesz zastąpić - bez przygotowania" wyrażenie". Składnia atrybutowego jest starsza i uważana za "dziedzictwo", ale nadal działa, a wiele aplikacji wykorzystuje go, więc wątpię, że wkrótce odejdzie w dowolnym momencie.

0
Nadav Har'El 14 marzec 2021, 07:25