Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用couchbase for item在数据库中添加对象数组而不丢失其他数据_Node.js_Typescript_Couchbase_N1ql - Fatal编程技术网

Node.js 如何使用couchbase for item在数据库中添加对象数组而不丢失其他数据

Node.js 如何使用couchbase for item在数据库中添加对象数组而不丢失其他数据,node.js,typescript,couchbase,n1ql,Node.js,Typescript,Couchbase,N1ql,像这样 { id:1, name:john, role:[ {name:boss, type:xyz}, {name:waiter, type:abc} ] } 我想在不丢失其他数据的情况下将对象数组添加到“角色”,但新数据应该作为对象添加到数组中 我试过了 bucket.upsert(key, data, (error: CouchbaseError | null, result: any) => {}) 其中key是文档的id,数据是{name:boss,ty

像这样

{
 id:1,
 name:john, 
 role:[
  {name:boss, type:xyz}, 
  {name:waiter, type:abc}
 ]
} 
我想在不丢失其他数据的情况下将对象数组添加到“角色”,但新数据应该作为对象添加到数组中

我试过了

bucket.upsert(key, data, (error: CouchbaseError | null, result: any) => {})
其中key是文档的id,数据是{name:boss,type:xyz} 它显示密钥已经存在

对于db.upsert,它用新数据替换整个数据

var query = N1qlQuery.fromString('UPDATE `myBucket` SET role = ' + '"' + data + '"' + ' WHERE meta().id =' + '"' + key + '"');

上面的代码显示了数据库中的角色:[object]

其次,我认为您需要的是子文档API,特别是“array append”操作。这允许您对文档的某些部分进行更改

我不是一个很好的Node/JavaScript开发人员,但我假设您的示例是这样的:

bucket
  .mutateIn('1')
  .arrayAppend('role', theNewRoleYouWantToAdd)
  .execute(function(err, res) {
    
  });

旁注:对于N1QL示例,显示
[object object]
的原因可能与将其作为字符串返回的
数据有关。您还应该查找“SQL注入”,因为像这样的N1QL代码可能会受到影响。查看占位符和。

您使用的是Couchbase的哪个版本,您使用的是Node SDK的哪个版本?对于Couchbase:2.6.12和Node:v14.16.12.6.12,必须是Couchbase SDK版本,您使用的Couchbase Server的哪个版本?Windows上的7.0.0(beta)企业版感谢上述解决方案。我已经试过了,但它显示“.mutateIn不存在于类型bucket上”,并没有得到确切的问题,因为我是couchbase的新手。请就上述问题提出解决方案。谢谢。@softwaredeveloper您已经达到了我的Node/JS知识的极限,所以我请Couchbase的其他人来看看。
bucket
  .mutateIn('1')
  .arrayAppend('role', theNewRoleYouWantToAdd)
  .execute(function(err, res) {
    
  });