Couchbase upsert覆盖整个文档数据

时间:2017-11-15 20:35:50

标签: database couchbase n1ql

我有以下密钥的文件:

{
 "uid": "art_canvas_fairytale_mod_main"
  ...
},
{     
 "uid": "art_canvas_landscape_rig_main"
  ...
},

我想做的是把第四部分带到" mod"或" rig"在这些情况下,添加一个键"类型"有这个价值。所以数据应该是这样的。

{
 "uid": "art_canvas_fairytale_mod_main"
 "type": "mod" 
 ...
},
{     
 "uid": "art_canvas_landscape_rig_main"
 "type": "rig" 
  ...
},

我试过的是以下

UPSERT INTO test (key _k, value _v) 
SELECT META().id _k, SPLIT(uid, "_")[3] _v 
FROM test 
WHERE CONTAINS(uid, "_mod_") OR CONTAINS(uid, "_rig_")

然而,这会将我文档中的所有数据覆盖到我想要的类型值。如何构造查询以便插入或更新"类型"键入适当的值而不覆盖文档中的所有数据

1 个答案:

答案 0 :(得分:0)

如果您只是在现有文档中添加字段,请使用UPDATEUPSERT将创建或替换文档。

使用UPDATESET

UPDATE test 
  SET type = SPLIT(uid, "_")[3] 
  WHERE SPLIT(uid, "_")[3] IN ["mod", "rig"] 
RETURNING *;

由于RETURNING子句:

,结果如下所示
[
  {
    "test": {
      "type": "mod",
      "uid": "art_canvas_fairytale_mod_main"
    }
  },
  {
    "test": {
      "type": "rig",
      "uid": "art_canvas_landscape_rig_main"
    }
  }
]