【问题标题】:Select couchbase nested object选择 couchbase 嵌套对象
【发布时间】:2017-11-10 14:43:39
【问题描述】:

我有一堆结构如下的文档:

{
  "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】:

    使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2013-03-26
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多