Dynamoose / DynamoDB更新将空数组保存为空

我正在使用Node.js包Dynamoose处理我的Web应用程序中的DynamoDB请求。

问题是当我尝试更新该项目,每当JSON对象包含一个空的数组Dynamoose似乎将其设置为null。 或者对于我所知道的,它可以是DynamoDB。

下面是我用于这个表的模式的一部分。

var NoteSchema = new dynamoose.Schema({ _id: String, details: Array }); 

在下面的代码中,variablesbody被设置为{details: []} 。 我已经通过运行console.log(body);确认了这一点console.log(body);

 Note.update({ _id: searchid }, body, function(err, note) { if (err) { console.log(err); } else { console.log(note); } }); 

问题是在运行console.log(note);callback函数里面console.log(note); details甚至不显示。 所以它是空的或未定义的。 在amazon web services中,对于该条目再次不存在details

有什么奇怪的是,当创build一个新的注意,设置details = [] ,并保存,细节是一个空的数组,完美的作品。 所以对我来说,更新logging并将该属性设置为空数组似乎就像一个特定的问题,因为创build一个logging并将该属性设置为一个空数组是完美的。

如何更新logging并将详细信息设置为空数组?

想通了。 将此问题提交给GitHub回购。 基本上,代码中的下列行( lib / Model.js, 关于第396行)检查值是否为长度为0的数组。如果是这样,它将在将该JSON密钥发送给AWS之前将其删除。

 if(val === null || val === undefined || val === '' || (Array.isArray(val) && val.length === 0)) { 

我用叉子提交了一个拉请求 。 在那个pull请求中,我做了更改,以允许选项的可选 JSON对象parameter passing到更新函数中。 这是更新函数的第三个参数,就在callback函数之前。 如果有一个名为emptyarrayallowed的键,并且该值设置为true那么上面的那一行将变成下面的内容。

 if(val === null || val === undefined || val === '') { 

例如在上面的示例中,将更新函数更改为以下内容(只要您使用我的分支或拉取请求已被批准)。

 Note.update({_id: searchid}, body, {"emptyarrayallowed": true}, function(err, note) { if (err) { console.log(err); } else { console.log(note); } }); 

如果您对此解决scheme有任何疑问,请告知我们。