You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Couchbase N1QL查询获取所有书籍名称?

解决Couchbase中提取所有书籍name字段的查询问题

文档结构

你的Couchbase文档结构如下:

{
  "docId": "1111212",
  "user": {
    "id": "5050017",  
    "name": "string", 
    "type": "string"
  },
  "books": {
        "1": {
          "id": "1",
          "name": "Book1",
          "author":{
             "id":"A1",
             "name":"name"
          }
        },
      "2": {
          "id": "2",
          "name": "Book2",
          "author":{
             "id":"A2",
             "name":"name"
            }
        }
    }
}

问题分析

你之前尝试的两个查询都无法满足需求:

  • SELECT b.books.*.name FROM bucket_name b where meta().id like '%books_details%' OFFSET 0 LIMIT 10:N1QL不支持*.name这种多层通配的直接引用写法,无法正确提取每个书籍对象的name字段。
  • SELECT OBJECT_NAMES(b.books) FROM bucket_name b where meta().id like '%books_details%' OFFSET 0 LIMIT 10:OBJECT_NAMES()仅返回books对象的键名(如"1"、"2"),而非对应书籍对象中的name属性。

正确查询方法

方法1:拆分每个书籍为单独行返回

使用OBJECT_VALUES()将books对象的所有值转换为数组,再通过UNNEST将数组拆分为单独的行,即可逐个提取书籍name:

SELECT book.name
FROM bucket_name b
UNNEST OBJECT_VALUES(b.books) AS book
WHERE META().id LIKE '%books_details%'
OFFSET 0 LIMIT 10;

查询返回结果示例:

[
  { "name": "Book1" },
  { "name": "Book2" }
]

方法2:将同文档的书籍name整理为数组返回

如果需要把单份文档下的所有书籍name放在一个数组里返回,使用数组推导式:

SELECT ARRAY book.name FOR book IN OBJECT_VALUES(b.books) END AS book_names
FROM bucket_name b
WHERE META().id LIKE '%books_details%'
OFFSET 0 LIMIT 10;

查询返回结果示例:

[
  { "book_names": ["Book1", "Book2"] }
]

内容的提问来源于stack exchange,提问作者ULLAS K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:14:54