Open amitava82 opened 8 years ago
Are you saying that if you have a schema like this and create an item without any children then the children property doesn't exist? This is in line with the way the underlying db behaves.
const schema = {
id: joi.number().integer(),
children: vogels.types.stringSet()
}
const example = vogels.define('example', {
hashKey: 'id',
schema: schema,
});
example.create({id: 1},(err, volume) => {}
The same would be the case if you remove all items from a stringSet. The property will be removed completely.
example.update(1, {
children: {
$add: 'a',
},
}, () => {});
example.update(1, {
children: {
$del: 'a',
},
}, () => {});
If I've misunderstood the question then please let me know.
Ah I see. I found that empty string is not saved in dynamo(!). Does that also mean it drops empty array?
In that case, is there any way to return object as per Schema definition (add missing properties even if missing from db response) for model consistency.
At the minute dynogels replicates the behaviours of dynamoDB. The underlying database doesn't allow empty strings (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) so I'm not sure it'd be a good idea to support that here.
@clarkie Hi, thanks for awesome works.
I have the same case, but in my case i'm explicitly set default([]) in Joi schema for array field. Also from http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
An attribute value cannot be an empty String or empty Set (String Set, Number Set, or Binary Set). However, empty Lists and Maps are allowed.
Are there any reasons why empty arrays are not allowed?
The weird thing is that it Dynogels does support empty arrays – on updates. It just omits them on inserts.
So what I ended up doing is whenever I insert (edit: I mean, create) an entity, I immediately update it with "itself".
Feels stupid, but my use-case needs very few inserts thankfully, so I think I'll be fine with the overhead this causes.
I'd like to reopen this issue if possible. Is there a reason that we omit empty arrays when you create them? There are scenarios where we actually need the array to be an empty array. Thanks.
So with this change you would be able to create documents with empty arrays. Also you can create documents with default empty array if you specify it in your schema. What do you guys think? #194
Is there any particular reason you are removing null/empty arrays from attrs while creating? My schema has array values and I'd like to store empty arrays if none for consistency. Or return object as per schema when getting the item from db.