【问题标题】:how to add array of object in database using couchbase for item without losing other data如何使用 couchbase 在数据库中添加对象数组而不丢失其他数据
【发布时间】:2021-05-06 20:09:35
【问题描述】:

喜欢这个

{
 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} 它显示密钥已经存在。

对于 db.upsert,它将整个数据替换为新数据。

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

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

【问题讨论】:

  • 你用的是什么版本的Couchbase,你用的是什么版本的Node SDK?
  • 沙发底座:2.6.12 和节点:v14.16.1
  • 2.6.12 必须是couchbase sdk 版本,您使用的Couchbase Server 是什么版本?
  • Windows 上的 7.0.0 (beta) 企业版

标签: node.js typescript couchbase n1ql


【解决方案1】:

首先,我会考虑将 Couchbase Node SDK 升级到 3.x。

其次,我认为您正在寻找的是子文档 API,特别是“数组追加”操作。这允许您更改文档的部分 这是example from the 2.6 docs

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 代码可能很容易受到影响。查看占位符和parameterization

【讨论】:

  • 感谢上述解决方案。我已经尝试过了,但它显示“.mutateIn 在类型存储桶上不存在”,没有得到确切的问题,因为我是 couchbase 的新手。请为上述问题提出解决方案。谢谢。
  • @softwaredeveloper 你已经达到了我对 Node/JS 知识的极限,所以我请 Couchbase 的其他人来看看。
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2016-08-11
  • 2017-03-20
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多