使用couchbase N1QL仅获取子文档

时间:2017-09-04 07:22:05

标签: sql database couchbase n1ql nosql

在我们的couchbase数据库中,我们有一个包含较大对象的存储桶。这些物体里面还有其他物体,比方说人。这应该是一个数组,但由于某些原因,我们必须将其创建为对象的对象,这就是它的样子:

{
    "companyName": "company name",
    "companyid": "11111-GUID-11111",
    "people": {
        "22222-GUID-22222": {
            "peopleid": "22222-GUID-22222",
            "name": "name1"
        },
        "33333-GUID-33333": {
            "peopleid": "33333-GUID-33333",
            "name": "name2"
        },
        "44444-GUID-44444": {
            "peopleid": "44444-GUID-44444",
            "name": "name3"
        }
    }
}

使用这种结构,我可以创建一个查询来获取一个" people"使用如下查询的对象:

SELECT c.*
FROM companies c
WHERE ANY v IN OBJECT_VALUES(c.people) SATISFIES v.peopleid = "22222-GUID-22222" END;

这种结构的问题在于数据库以整个公司对象进行响应,但是我只需要" people"符合条件的对象,我不需要"22222-GUID-22222"以外的其他人。

有没有办法用couchbase实现这个目标?

1 个答案:

答案 0 :(得分:1)

SELECT FIRST v FOR v IN OBJECT_VALUES(c.people) WHEN v.peopleid = "22222-GUID-22222" END AS people
FROM companies c
WHERE ANY v IN OBJECT_VALUES(c.people) SATISFIES v.peopleid = "22222-GUID-22222" END;