Dynamose/DynamoDB更新将空数组保存为null
Dynamoose/DynamoDB update saving empty array as null
我正在使用Node.js包Dynamose来处理web应用程序中的DynamoDB请求。
问题是,每当JSON对象包含空数组时,当我尝试更新该项时,Dynamose似乎将其设置为null。或者我所知道的可能是迪纳摩。
下面是我在这个表中使用的模式的一部分。
var NoteSchema = new dynamoose.Schema({
_id: String,
details: Array
});
在下面的代码中,变量body
被设置为{details: []}
。我已经通过运行console.log(body);
确认了这一点。
Note.update({
_id: searchid
}, body, function(err, note) {
if (err) {
console.log(err);
} else {
console.log(note);
}
});
当运行console.log(note);
details
时,回调函数内部甚至根本没有出现问题。所以它是null或未定义的。在亚马逊网络服务中,details
对于该条目来说根本不存在。
奇怪的是,当创建一个新的Note、设置details = []
并保存它时,details是一个空数组,并且工作得很好。因此,在我看来,更新记录并将该属性设置为空数组似乎是一个特定的问题,因为创建记录并将其设置为空阵列非常有效。
如何更新记录并将详细信息设置为空数组?
想明白了。已将此问题提交到GitHub回购。基本上,下面的代码行(lib/Model.js关于第396行)检查该值是否为长度为0的数组。如果是这样,它将在将JSON密钥发送到AWS之前删除该密钥。
if(val === null || val === undefined || val === '' || (Array.isArray(val) && val.length === 0)) {
我使用fork提交了一个pull请求。在那个pull请求中,我进行了更改,允许将选项的可选JSON对象参数传递到更新函数中。这是更新函数的第三个参数,就在回调函数之前。如果有一个名为emptyarrayallowed
的键,并且该值被设置为true
,那么上面的那一行将被更改为以下内容。
if(val === null || val === undefined || val === '') {
例如,在我上面的例子中,将更新功能更改为以下功能将起作用(只要您正在使用我的fork或pull请求已获得批准)。
Note.update({_id: searchid}, body, {"emptyarrayallowed": true}, function(err, note) {
if (err) {
console.log(err);
} else {
console.log(note);
}
});
如果您对这个解决方案有任何疑问,请告诉我。
Charlie答案的小更新。正如Charlie所提到的,功能被合并了。但是,属性名称似乎已从emptyarrayallow重命名为allowEmptyArray。
- Javascript-将类型化数组保存为blob,并作为二进制数据读回
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- AJAX将JSON数组保存到多个JS变量中
- 使用 JavaScript 将多维数组保存到 XML 中
- 将多维Javascript数组保存到服务器端CSV
- 将字节数组保存到Titanium中的pdf文件中
- MongoDB Mongoose使用数组保存或更新
- 如何使用 js 将空数组保存到 mongodb 中
- 为什么我不能将返回的数组保存在另一个现有数组中
- 如何在 JavaScript 中运行时将数组保存在对象中
- 如何只需一次调用就可以将对象数组保存到mongoose DB中
- 正在尝试将SVG对象的javascript数组保存到SQL
- 以特定格式将数组保存到MySQL
- 使用AngularJS将表单数据数组保存到上一个数组
- Node.js异步数组保存数据到mongodb
- 将对象数组保存到本地存储不工作
- 数组保存形式
- 在javascript中将值从数组保存到变量
- 当将对象数组保存为JSON时,我需要在Sample.txt中使用以下格式以避免出现解析错误:
- 猫鼬填充丢失数组保存的更改