Sql 使用couchbase N1QL仅获取子文档
在couchbase数据库中,我们有一个包含相对较大对象的bucket。这些物体里面还有其他物体,比如说人。这应该是一个数组,但是出于某些原因,我们不得不将其创建为对象的对象,它看起来是这样的: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
{
"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;