我有一堆像这样结构的文件:
{
"month": 11,
"year": 2017,
//other fields
"Cars":[
{
"CarId": 123,
// other fields
},
{
"CarId": 456,
// other fields
}
// other cars
]
}
我正在用id = 456
搜索一个具体的car实例。到目前为止,我已经:
SELECT Cars
FROM DevBucket
WHERE year = 2017
AND month = 11
AND [CarId=456]
Couchbase返回正确的文档(其中包含目标汽车)。但是,输出包含文档中所有Car
节点的数组,但我希望有一个单独的car (就像在上面的示例中使用SELECT Cars[1]
一样)。
通过couchbase教程搜索没有给我一个答案。有更好的办法吗?
发布于 2017-11-12 14:54:50
使用子句,您可以执行“嵌套数组与其父对象的连接”。这将为每个嵌套元素生成一个对象,其中包括嵌套元素作为顶层字段,以及原始文档的其余部分(嵌套元素和所有元素)。
当其父对象的月和年为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和UNNEST: JSON的规范化和非规范化
https://stackoverflow.com/questions/47225291
复制相似问题