选择couchbase嵌套对象

时间:2017-11-10 14:43:39

标签: couchbase

我有一堆文件,其结构如下:

{
  "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教程没有给我答案。还有更好的方法吗?

1 个答案:

答案 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