2015-12-02 4 views
10

私は、以下のリストの例があります。リスト内のMap属性値によって、DynamoDBのマップリストからどのように削除できますか?

{ 
    "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" 
} 

を私はして地図を削除する:"entityId": "558da3de395b1aee2d6b7d2b"。 ....私はUpdateItemクエリを考えています

は、私がREMOVE発現ドキュメント(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html)を見てきましたが、私は、インデックス値によって、リストから項目を削除を超えて、任意の例を参照することができないよう

+0

私は同様の問題に直面しています。あなたはこれに対する解決策を見つけましたか? –

+0

私も問題があります。 – ephemeralCoder

答えて

-1

オブジェクトを処理できるものにシリアル化し、そのエントリを削除するように変更してから、update-itemを使用して変更を保存する必要があります。

私はnode.jsユーザーではありませんが、最初にオブジェクトをどのように作成しましたか?あなたはjsonの文字列を手作りしていますか?もしそうなら、あなたはすべきではありません。 jsonを扱うライブラリがあり、それらを簡単に変更できるようにするライブラリがあり、その結果として変更されたjson文字列を得ることができます。

How to parse JSON using Node.js?

+1

ここで提案されているアプローチの問題点は、アトミックではないということです。 2人のクライアントが同じ時刻にそのアイテムを読み込んだ場合、両方がアイテムを書き戻すと、変更の1つが失われます。 – sheldonh

+0

リスト内の位置以外の特性でDynamoDBのリストから項目を削除するという質問には答えません。 – Juriy

1

私は今この問題に数回実行した、と残念ながら何の簡単な解決策はありません。私が見つけた2つの最も一般的な回避策は、#favorites.#entityIdを使用して更新式で直接お気に入りを参照することができます。

A.リストではなくマップを使用します。順序が重要な場合は、各マップに順序属性を追加します。データアクセスレイヤーでは、目的のアレイタイプとの間で変換を行う必要があります。

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

B.私はJavaScriptでBoto3ライブラリを使用していないが、Pythonで前にこれを行っているhttp://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForItems.html

0

を参照して、代わりに1対多のテーブルを使用します。私はlinkをJavascriptのアイテム削除機能に持っています。私がPythonでしたのは、私がアイテムのための私のテーブルqueriedであり、削除したいオブジェクトの主キーのリストを作成し、delete関数を呼び出したことです。

関連する問題