Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
如何使用JavaSDK将嵌套的json对象存储和更新到couchbase中_Java_Json_Couchbase_Java Client - Fatal编程技术网

如何使用JavaSDK将嵌套的json对象存储和更新到couchbase中

如何使用JavaSDK将嵌套的json对象存储和更新到couchbase中,java,json,couchbase,java-client,Java,Json,Couchbase,Java Client,我使用的是couchbase社区版5.0.1和java客户端2.7.4。我想将以下嵌套json对象存储到couchbase中。如果我想在不影响其他字段的情况下更新同一对象 例如: 如果我想在玩家对象下再添加一个玩家对象 排列 如果我想再添加一个组,请在组对象数组下显示“Z组” 如何在不影响其他领域的情况下实现这一点 { "doctype": "config:sample", "group": [{ "name": "X Group",

我使用的是couchbase社区版5.0.1和java客户端2.7.4。我想将以下嵌套json对象存储到couchbase中。如果我想在不影响其他字段的情况下更新同一对象

例如:

  • 如果我想在玩家对象下再添加一个玩家对象 排列
  • 如果我想再添加一个组,请在组对象数组下显示“Z组”
  • 如何在不影响其他领域的情况下实现这一点

     {
        "doctype": "config:sample",
        "group": [{
                "name": "X Group",
                "id": 1,
                "players": [{
                        "name": "Roger Federer",
                        "number": 3286,
                        "keyword": "tennies"
                    },
                    {
                        "name": "P. V. Sindhu",
                        "number": 4723,
                        "keyword": "badminton"
                    }
                ]
            },
            {
                "name": "Y Group",
                "id": "2",
                "players": [{
                        "name": "Jimmy Connors",
                        "number": 5623,
                        "keyword": "tennies"
                    },
                    {
                        "name": "Sachin",
                        "number": 8756,
                        "keyword": "Cricket"
                    }
                ]
            }
        ]
    }
    

    N1QL在阵列上具有多种操作功能:


    在您的例子中,您可以简单地使用ARRAY\u INSERT或ARRAY\u PREPEND查看更新/更新语法(最后一个示例)


    如果知道要更新哪些文档ID,可以使用键值子文档API,这通常比通过N1QL进行单个文档更新要快

    这将在X组的“玩家”数组末尾添加一个新玩家:

    这将向“组”数组添加一个新的组Z:

    UPDATE default AS d
    SET d.group = ARRAY_APPEND(d.group, {......})
    WHERE .....;
    
    UPDATE default AS d
    SET g.players = ARRAY_APPEND(g.players, {......}) FOR g IN d.group WHEN g.id = 2 END
    WHERE .....;
    
    bucket.mutateIn(docId)
            .arrayAppend("group[0].players",
                    JsonObject.create()
                            .put("name", "John Smith"))
                            // ... other player JSON
            .execute();
    
    bucket.mutateIn(docId)
            .arrayAppend("group",
                    JsonObject.create()
                            .put("name", "Z Group"))
                            // ... other group JSON
            .execute();