dynamodb creating a string set
===

I have a lot of objects with unique IDs. Every object can have several labels associated to it, like this:

    123: ['a', 'hello']
    456: ['dsajdaskldjs']
    789: (no labels associated yet)

I'm not planning to store all objects in DynamoDB, only these sets of labels. So it would make sense to add labels like that:

   1. find a record with (id = needed_id) 
   2. if there is one, and it has a set named `label_set`, add a label to this set
   3. if there is no record with such id, or the existing record doesn't have an attribute named `label_set`, create a record and an attribute, and initialize the attribute with a set consisting of the label

if I used sets of numbers, I could use just `ADD` operation of `UPDATE` command. This command does exactly what I described. However, this does not work with sets of strings:

> If no item matches the specified primary key:  
> ADD— Creates an item with supplied primary key and number (or set of numbers) for the attribute value. Not valid for a string type.

so I have to use a `PUT` operation with `Expected` set to `{"label_set":{"Exists":false}}`, followed (in case it fails) by an `ADD` operation. These are two operations, and it kinda sucks (since you pay per operation, the costs of this will be 2 times more than they could be).

This limitations seems really weird to me. Why are something what works with numbers sets would not work with string sets? Maybe I'm doing something wrong.

Using many records like `(123, 'a'), (123, 'hello')` instead of one record per object with a set is not a solutions: I want to `get` all the values from the set at once, without any scans.