【问题标题】:Couchbase N1ql query for updating new objet to JSON array用于将新对象更新为 JSON 数组的 Couchbase N1ql 查询
【发布时间】:2017-08-24 21:17:53
【问题描述】:

我有以下示例 JSON

"address":{
    "details":
    [
        {
        "id"        :<system generated UUID>,
        "city"      :{"type"        : "string"},
        "country"   :{"type"        : "string"},
        "name"      :{"type"        : "string"},
        "url"       :{"type"        : "string"},
        "contacts"  :
                [{
                "email":{"type"        : "string"},
                "phone":{"type"        : "number"}
                }]
        }
    ]
}

我希望数据采用以下方式 示例 1:

"address":
{
  "details": [
    {
      "id": 1234,
      "city": "Medway",
      "country": "United Kingdom",
      "name": "Medway Youth Hostel",
      "url": "http://www.yha.org.uk"
    }]
}

示例 2:

"address":
{
  "details": [
    {
      "id": 1234,
      "city": "Medway",
      "country": "United Kingdom",
      "name": "Medway Youth Hostel",
      "url": "http://www.yha.org.uk",
      "contact": [
        {
          "email": "hari34@gmail.com",
          "phone": 6789435634
        }
          ]
    }]
}  

示例 3:

"address":
{
  "details": [
    {
      "id": 1234,
      "city": "Medway",
      "country": "United Kingdom",
      "name": "Medway Youth Hostel",
      "url": "http://www.yha.org.uk",
      "contact": [
        {
          "email": "hari34@gmail.com",
          "phone": 6789435634
        },
        {
          "email": "sri123@gmail.com",
          "phone": 9876655555
        }
          ]
    }]
}

示例 4:

"address":
{
  "details": [
    {
      "id": 1234,
      "city": "Medway",
      "country": "United Kingdom",
      "name": "Medway Youth Hostel",
      "url": "http://www.yha.org.uk",
      "contact": [
        {
          "email": "hari34@gmail.com",
          "phone": 6789435634
        }
      ]
    },
    {
      "id": 3456,
      "city": "Texas",
      "country": "USA",
      "name": "Texas Youth Hostel",
      "url": "http://www.yha.org.uk",
      "contact": [
        {
          "email": "ram123@gmail.com",
          "phone": 876543219
        }
      ]
    }
  ]
}

我对 n1ql 查询非常陌生,有人能帮我找到在对象中插入/更新数组到对象的解决方案吗?示例 1 将数据插入 JSON,示例 2 将数据更新为示例 1,然后... 1. 请帮助获取满足上述示例的 n1ql 查询。 2.如何在文档中生成一个UUID转id字段

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:

    1) 追加数组从不检查数组中是否已存在元素

    INSERT INTO default VALUES ("k01", { "details": [ { "id": 1234, "city": "Medway", "country": "United Kingdom", "name": "Medway Youth Hostel", "url": "http://www.yha.org.uk" }] });
    
    UPDATE default AS d SET e.contact = [ { "email": "hari34@gmail.com", "phone": 6789435634 } ]
                               FOR e IN d.details WHEN e.id = 1234 END
    WHERE META().id = "k01";
    
    UPDATE default AS d SET e.contact = ARRAY_APPEND(e.contact,{ "email": "sri123@gmail.com", "phone": 9876655555 })
                               FOR e IN d.details WHEN e.id = 1234 END
    WHERE META().id = "k01";
    
    UPDATE default AS d SET d.details = ARRAY_APPEND(d.details,{ "id": 3456, "city": "Texas", "country": "USA", "name": "Texas Youth Hostel", "url": "http://www.yha.org.uk", "contact": [ { "email": "ram123@gmail.com", "phone": 876543219 } ] })
    WHERE META().id = "k01";
    
    SELECT * from default USE KEYS["k01"];
    

    2) 使用 UUID() 函数,如下所示

    INSERT INTO default VALUES ("k01", { "details": [ { "id": UUID(), "city": "Medway", "country": "United Kingdom", "name": "Medway Youth Hostel", "url": "http://www.yha.org.uk" }] });
    

    【讨论】:

    • 如何控制重复值,当我每次执行查询3 时,无论元素是否存在,都插入相同的值。请建议我(查询)。这样就不会发生重复的追加
    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多