Couchbase 是一个高性能的 NoSQL 数据库,支持复杂的查询操作。对于嵌套数组的查询,Couchbase 提供了多种索引类型来优化查询性能。以下是一些常用的索引类型和示例,帮助你理解和创建用于嵌套数组查询的索引。
GSI 是 Couchbase 中最常用的索引类型之一,适用于大多数查询场景,包括嵌套数组查询。
假设我们有一个包含嵌套数组的文档:
{
"id": "user::123",
"name": "John Doe",
"orders": [
{
"orderId": "order::1",
"items": [
{
"itemId": "item::1",
"quantity": 2
},
{
"itemId": "item::2",
"quantity": 1
}
]
},
{
"orderId": "order::2",
"items": [
{
"itemId": "item::3",
"quantity": 3
}
]
}
]
}
要查询包含特定 itemId
的订单,可以创建一个 GSI 索引:
CREATE INDEX idx_orders_items ON `bucket_name`(DISTINCT ARRAY i.itemId FOR i IN orders.items END) WHERE type = 'user';
使用 N1QL 查询语言进行查询:
SELECT u.id, u.name, o.orderId, i.itemId, i.quantity
FROM `bucket_name` u
JOIN orders o ON KEYS ARRAY [u.id || '::' || o.orderId] FOR o IN u.orders END
JOIN orders.items i ON KEYS ARRAY [o.orderId || '::' || i.itemId] FOR i IN o.items END
WHERE u.type = 'user' AND i.itemId = 'item::1';
FTS 索引适用于全文搜索场景,也可以用于嵌套数组的查询。
假设我们要对 orders.items.itemId
进行全文搜索:
CREATE FULLTEXT INDEX idx_fts_orders_items ON `bucket_name`(orders.items.itemId) WHERE type = 'user';
使用 FTS 查询语言进行查询:
SELECT * FROM `bucket_name` WHERE orders.items.itemId MATCH 'item::1' AND type = 'user';
JSON 索引适用于简单的键值对查询,但对于嵌套数组的查询可能不太适用。
对于嵌套数组的查询,GSI 是最常用的索引类型,可以提供良好的性能和灵活性。FTS 索引也适用于某些场景,特别是全文搜索。选择合适的索引类型取决于你的具体查询需求和数据结构。
领取专属 10元无门槛券
手把手带您无忧上云