我有一堆文件,其结构如下:
{
"month": 11,
"year": 2017,
//other fields
"Cars":[
{
"CarId": 123,
// other fields
},
{
"CarId": 456,
// other fields
}
// other cars
]
}
我正在搜索id = 456
的具体汽车实例。到目前为止,我有:
SELECT Cars
FROM DevBucket
WHERE year = 2017
AND month = 11
AND [CarId=456]
Couchbase返回正确的文档(包含目标汽车)。但是输出包含文档中所有Car
节点的数组,但我想要一辆车(就像我在上面的示例中使用SELECT Cars[1]
一样)
搜索couchbase教程没有给我答案。还有更好的方法吗?
答案 0 :(得分:1)
使用UNNEST
clause,您可以执行"嵌套数组与其父对象的连接。"这将为每个嵌套元素生成一个对象,该对象包括嵌套元素作为顶级字段,以及原始文档的其余部分(嵌套元素和所有)。
当其父对象的月份和年份为11/2017时,此查询将检索ID为456
的汽车。
SELECT car
FROM DevBucket db
UNNEST Cars car
WHERE car.CarId = 456
AND db.year = 2017
AND db.month = 11;
创建此索引,以便比使用主索引获得更快的查找:
CREATE INDEX cars_index
ON DevBucket(DISTINCT ARRAY car.CarId FOR car IN Cars END);
有关UNNEST
的更多信息,请参阅NEST and UNNEST: Normalizing and Denormalizing JSON on the Fly