json - N1QL 在对象内搜索某些对象

标签 json select couchbase n1ql

我的 couchbase 存储桶中有多个文档,结构如下:

{
  "objectType": "someObjectType",
  "id": "1",
  "latest": {
    "id": "1",
    "version": "biyr4jqi4nny"
  },
  "history": {
    "bi11b295bjng": {
      "id": "1",
      "version": "bi11b295bjng"
    }
    "bi1189wx1h6v": {
      "id": "1",
      "version": "bi1189wx1h6v"
    }
  }
}

如上面的代码片段所示,历史是对象的对象。我要做的是选择 objectType、id、latest 和 history,但 history 应该只包括查询中指定的对象,而不是所有历史记录(可能很长)。

我的查询是这样的:

SELECT
    bucket.id, 
    bucket.objectType, 
    bucket.latest, 
    bucket.history.bi11b295bjng
FROM bucket WHERE objectType = 'someObjectType'

这会产生以下响应:

[
  {
    "objectType": "someObjectType",
    "id": 1,
    "latest": {
      "id": "9mobile_NG_001-ROW",
      "version": "biyr4jqi4nny"
    },
    "biyr4jqi4nny": {
      "id": "1",
      "version": "biyr4jqi4nny"
    }
  }
]

查询的对象从父对象中解包。所需的输出应如下所示:

[
  {
    "objectType": "someObjectType",
    "id": 1,
    "latest": {
      "id": "9mobile_NG_001-ROW",
      "version": "biyr4jqi4nny"
    },
    "history": {
      "biyr4jqi4nny": {
        "id": "1",
        "version": "biyr4jqi4nny"
      }
    }
  }
]

如何在不丢失父对象的情况下获取 history.{version}?

最佳答案

构造对象和别名作为历史

SELECT
    b.id, 
    b.objectType, 
    b.latest, 
    { b.history.bi11b295bjng } AS history
FROM bucket AS b 
WHERE b.objectType = "someObjectType";

如果需要同一字段的多个对象

SELECT
    b.id, 
    b.objectType, 
    b.latest, 
    { b.history.bi11b295bjng, b.history.bi1189wx1h6v } AS history
FROM bucket AS b 
WHERE b.objectType = "someObjectType";

如果你有很多想删除其中一个

SELECT
    b.id, 
    b.objectType, 
    b.latest, 
    OBJECT_REMOVE(b.history,"bi11b295bjng") AS history
FROM bucket AS b 
WHERE b.objectType = "someObjectType";

关于json - N1QL 在对象内搜索某些对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71978791/

相关文章:

javascript - 使用带有 ember 数据的 postgres json 字段

javascript - 如何将 onmousedown 事件绘制为存储在数组某个索引处的值,而不是整个数组调用?

mysql - 对分组字段求和

mysql - (Mysql : SELECT first number not taken in series of numbers, 类似于 MAX()

couchbase - couchbase中的键值存储是什么

kubernetes - 使用 Helm Chart 安装 Couchbase 失败并出现 Readiness 探针

jQuery UI 自动完成 JSON 给出错误 : Uncaught TypeError: Cannot use 'in' operator to search for '62' in

mysql - 使用 SELECT 从嵌套的 INSERT 语句中提取数据?

couchdb - 沙发床和可能吗?

javascript - 解析 json 时处理反斜杠