Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Sql 使用couchbase N1QL仅获取子文档_Sql_Database_Couchbase_N1ql_Nosql - Fatal编程技术网

Sql 使用couchbase N1QL仅获取子文档

Sql 使用couchbase N1QL仅获取子文档,sql,database,couchbase,n1ql,nosql,Sql,Database,Couchbase,N1ql,Nosql,在couchbase数据库中,我们有一个包含相对较大对象的bucket。这些物体里面还有其他物体,比如说人。这应该是一个数组,但是出于某些原因,我们不得不将其创建为对象的对象,它看起来是这样的: { "companyName": "company name", "companyid": "11111-GUID-11111", "people": { "22222-GUID-22222": { "peopleid": "22222-G

在couchbase数据库中,我们有一个包含相对较大对象的bucket。这些物体里面还有其他物体,比如说人。这应该是一个数组,但是出于某些原因,我们不得不将其创建为对象的对象,它看起来是这样的:

{
    "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-2222”
之外的其他id的人


使用couchbase有什么方法可以实现这一点吗?

虽然答案总是很受欢迎,但提供一些关于代码如何解决手头问题的附加信息确实很有帮助。这样做可以帮助那些有类似(但不完全相同)问题的人。并非每个人都熟悉您的确切编码逻辑,但可能理解您的一般方法或概念。为了帮助改进您的答案,请提供一些,并查看上的帮助文章,以获取有关如何使您的答案有价值的提示:)vsr,感谢您的帮助!这几乎解决了我的问题。现在唯一的问题是,我必须做一些查询,比如说:我必须查询每个50岁以上的人。使用您的查询,我只能获得每个文档的第一个匹配项。如果你也能对此作出回应,那么答案将是完整的,我可以投票接受你的答案。再次感谢。我找到了解决办法。我不得不使用
ARRAY
语句,而不是
FIRST
。我对couchbase比较陌生,所以我花了一些时间。所以我要接受答案。还有一个问题,有没有办法只用一个条件来实现这一点?我必须动态地构建这些查询。如果这会降低性能,那么我同意此解决方案。当v.peopleid=“22222-GUID-22222”在数组长度(人)>0处结束时,从公司c中选择人员,让人员=数组v代表对象_值(c.people);
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;