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有任何疑问,请告知我们。