node.js - 如何使用 couchbase 在数据库中添加对象数组而不丢失其他数据
问题描述
像这样
{
id:1,
name:john,
role:[
{name:boss, type:xyz},
{name:waiter, type:abc}
]
}
我想将对象数组添加到“角色”而不丢失其他数据,但是新数据应该作为对象添加到数组中。
我试过
bucket.upsert(key, data, (error: CouchbaseError | null, result: any) => {})
其中 key 是文档的 id,data 是 {name:boss, type:xyz} 它表明 key 已经存在。
对于 db.upsert 它用新数据替换整个数据。
var query = N1qlQuery.fromString('UPDATE `myBucket` SET role = ' + '"' + data + '"' + ' WHERE meta().id =' + '"' + key + '"');
上面的代码显示了数据库中的角色:[对象对象]。
解决方案
首先,我会考虑将 Couchbase Node SDK 升级到 3.x。
其次,我认为您正在寻找的是子文档 API,特别是“数组追加”操作。这允许您对文档的某些部分进行更改这是 2.6 文档中的一个示例:
bucket
.mutateIn('customer123')
.arrayAppend('purchases.complete', 777)
.execute(function(err, res) {
// purchases.complete is now [339, 976, 442, 666, 777]
});
我不是一个 Node/JavaScript 开发人员,但我会假设你的例子是这样的:
bucket
.mutateIn('1')
.arrayAppend('role', theNewRoleYouWantToAdd)
.execute(function(err, res) {
});
旁注:对于您的 N1QL 示例,出现的原因[object object]
可能与您的data
对象将其作为字符串返回有关。您还应该查找“SQL 注入”,因为这样的 N1QL 代码可能很容易受到影响。查看占位符和参数化。
推荐阅读
- amazon-dynamodb - 删除项目并将其添加到 DynamoDB 中的列表
- sql - 如何在 plpgsql 中编写一个函数,将日期与没有时区的时间戳进行比较?
- python - Python:如何旋转此表
- javascript - 如何使用 Vue Js 检查最小长度并限制特殊字符?
- javascript - 如何使用 Node.js 中的 python 脚本?
- android - Expo 仅在网络上运行,在 Android 上失败并出现多个问题
- php - 我的数据库不接受“名称”属性
- amazon-dynamodb - DynamoDB 本地进程
- append - PowerBI:使用计算列附加表
- user-interface - 如何在 UI 上显示 apache 光束管道图