代码之家  ›  专栏  ›  技术社区  ›  dayuloli Crozin

couchbase-从对象数组中选择字段子集

  •  0
  • dayuloli Crozin  · 技术社区  · 6 年前

    我正在使用 travel-sample 数据集,并运行以下查询:

    SELECT id, schedule FROM `travel-sample`WHERE type = "route" LIMIT 1;
    

    返回结果如下:

    [
      {
        "id": 10000,
        "schedule": [
          {
            "day": 0,
            "flight": "AF198",
            "utc": "10:13:00"
          },
          {
            "day": 0,
            "flight": "AF547",
            "utc": "19:14:00"
          },
          ...
        ]
      }
    ]
    

    但是,我不想把 schedule.$.day 字段;即,我希望我的结果是:

    [
      {
        "id": 10000,
        "schedule": [
          {
            "flight": "AF198",
            "utc": "10:13:00"
          },
          {
            "flight": "AF547",
            "utc": "19:14:00"
          },
          ...
        ]
      }
    ]
    

    我怎么能 SELECT 只有对象数组中对象字段的子集?


    我试过了 UNNEST 但我不想每个人都有单独的记录 schedule 元素-我想要 日程安排 要保持嵌套在文档中的元素。

    我也试过用 OBJECT_REMOVE

    SELECT id, ARRAY OBJECT_REMOVE(x, 'day') FOR x in schedule END AS schedule FROM `travel-sample` WHERE type = "route" LIMIT 1;
    

    但是我想要的是白名单而不是黑名单字段。

    1 回复  |  直到 6 年前
        1
  •  2
  •   d4nyll    6 年前

    你的最后一次尝试很接近。而不是使用 OBJECT_REMOVE ,您可以简单地构造要返回的对象。

    SELECT id, ARRAY {"flight": x.flight, "utc": x.utc} FOR x in schedule END AS schedule FROM `travel-sample` WHERE type = "route" LIMIT 1;
    

    您将得到以下结果:

    [
      {
        "id": 10000,
        "schedule": [
          {
            "flight": "AF198",
            "utc": "10:13:00"
          },
          {
            "flight": "AF547",
            "utc": "19:14:00"
          },
          ...
        ]
      }
    ]