[{"data":1,"prerenderedAt":1822},["ShallowReactive",2],{"docs-/docs/framework/define":3,"docs-surround-/docs/framework/define":1754,"sidebar-docs":1760},{"id":4,"title":5,"body":6,"category":1742,"description":1743,"extension":1744,"links":1745,"meta":1746,"navigation":1747,"order":1745,"path":1750,"seo":1751,"stem":1752,"__hash__":1753},"docs/docs/framework/define.md","定义内容集合",{"type":7,"value":8,"toc":1733},"minimark",[9,18,25,34,39,42,45,80,83,89,92,264,284,288,291,306,532,550,556,559,562,1003,1008,1021,1026,1063,1068,1089,1092,1102,1387,1396,1400,1406,1608,1614,1720,1726,1729],[10,11,12,13,17],"p",{},"Nuxt Content 模块会自动解析位于 Nuxt 应用根目录下 ",[14,15,16],"code",{},"content/"," 目录中的所有内容文件。这种设置允许您自由地组织文件夹结构以适应项目需求。",[10,19,20,21,24],{},"为了更好地组织内容，您可以考虑使用内容集合（Content Collections），它可以让您更有效地对内容进行分类和管理。这些集合在 ",[14,22,23],{},"content.config.ts"," 文件中定义。",[26,27,28],"warning",{},[10,29,30,31,33],{},"如果没有 ",[14,32,23],{}," 文件，默认会解析并导入内容文件夹中的所有文件。但是，一旦添加了配置文件，只有与集合中定义的路径模式匹配的文件才会被导入。",[35,36,38],"h2",{"id":37},"什么是内容集合","什么是内容集合？",[10,40,41],{},"内容集合用于组织 Nuxt Content 项目中的相关项目。它们提供了一种结构化的方式来管理内容，使查询、显示和维护网站数据变得更加容易。",[10,43,44],{},"主要功能包括：",[46,47,48,56,62,68,74],"ul",{},[49,50,51,55],"li",{},[52,53,54],"strong",{},"逻辑分组","：将相似内容分组在一起，如博客文章、产品页面或文档文章",[49,57,58,61],{},[52,59,60],{},"共享配置","：对集合内的所有项目应用通用设置和验证",[49,63,64,67],{},[52,65,66],{},"改进的查询","：高效地获取和筛选相关内容项目",[49,69,70,73],{},[52,71,72],{},"自动类型推断","：在开发环境中获得类型安全和自动补全",[49,75,76,79],{},[52,77,78],{},"灵活的结构","：按内容类型、类别或任何其他适合您需求的逻辑分组来组织集合",[35,81,82],{"id":82},"定义集合",[10,84,85,86,88],{},"在项目的根目录中创建一个 ",[14,87,23],{}," 文件。这个特殊文件用于配置您的集合数据库、工具类型和内容处理。",[10,90,91],{},"以下是一个基本示例：",[93,94,99],"pre",{"className":95,"code":96,"filename":23,"language":97,"meta":98,"style":98},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineCollection, defineContentConfig } from '@nuxt/content'\n\nexport default defineContentConfig({\n  collections: {\n    docs: defineCollection({\n      // 指定此集合中的内容类型\n      type: 'page',\n      // 加载 `content` 目录内的所有文件\n      source: '**',\n    })\n  }\n})\n","ts","",[14,100,101,140,147,165,178,192,199,218,224,241,250,256],{"__ignoreMap":98},[102,103,106,110,114,118,121,124,127,130,133,137],"span",{"class":104,"line":105},"line",1,[102,107,109],{"class":108},"s7zQu","import",[102,111,113],{"class":112},"sMK4o"," {",[102,115,117],{"class":116},"sTEyZ"," defineCollection",[102,119,120],{"class":112},",",[102,122,123],{"class":116}," defineContentConfig",[102,125,126],{"class":112}," }",[102,128,129],{"class":108}," from",[102,131,132],{"class":112}," '",[102,134,136],{"class":135},"sfazB","@nuxt/content",[102,138,139],{"class":112},"'\n",[102,141,143],{"class":104,"line":142},2,[102,144,146],{"emptyLinePlaceholder":145},true,"\n",[102,148,150,153,156,159,162],{"class":104,"line":149},3,[102,151,152],{"class":108},"export",[102,154,155],{"class":108}," default",[102,157,123],{"class":158},"s2Zo4",[102,160,161],{"class":116},"(",[102,163,164],{"class":112},"{\n",[102,166,168,172,175],{"class":104,"line":167},4,[102,169,171],{"class":170},"swJcz","  collections",[102,173,174],{"class":112},":",[102,176,177],{"class":112}," {\n",[102,179,181,184,186,188,190],{"class":104,"line":180},5,[102,182,183],{"class":170},"    docs",[102,185,174],{"class":112},[102,187,117],{"class":158},[102,189,161],{"class":116},[102,191,164],{"class":112},[102,193,195],{"class":104,"line":194},6,[102,196,198],{"class":197},"sHwdD","      // 指定此集合中的内容类型\n",[102,200,202,205,207,209,212,215],{"class":104,"line":201},7,[102,203,204],{"class":170},"      type",[102,206,174],{"class":112},[102,208,132],{"class":112},[102,210,211],{"class":135},"page",[102,213,214],{"class":112},"'",[102,216,217],{"class":112},",\n",[102,219,221],{"class":104,"line":220},8,[102,222,223],{"class":197},"      // 加载 `content` 目录内的所有文件\n",[102,225,227,230,232,234,237,239],{"class":104,"line":226},9,[102,228,229],{"class":170},"      source",[102,231,174],{"class":112},[102,233,132],{"class":112},[102,235,236],{"class":135},"**",[102,238,214],{"class":112},[102,240,217],{"class":112},[102,242,244,247],{"class":104,"line":243},10,[102,245,246],{"class":112},"    }",[102,248,249],{"class":116},")\n",[102,251,253],{"class":104,"line":252},11,[102,254,255],{"class":112},"  }\n",[102,257,259,262],{"class":104,"line":258},12,[102,260,261],{"class":112},"}",[102,263,249],{"class":116},[26,265,266,273],{},[10,267,268,269,272],{},"目前，一个文档只能存在于一个集合中。如果一个文件在多个集合中被引用，实时重载将无法正常工作。为了避免这种情况，建议使用 ",[14,270,271],{},"exclude"," 属性通过适当的正则表达式模式明确地将文档从其他集合中排除。",[10,274,275,276,283],{},"这个主题在以下问题中仍在讨论：",[277,278,282],"a",{"href":279,"rel":280},"https://github.com/nuxt/content/issues/2966",[281],"nofollow","nuxt/content#2966","。",[285,286,287],"h3",{"id":287},"集合模式",[10,289,290],{},"模式（Schema）在集合内强制执行数据一致性，并作为 TypeScript 类型的真实来源。",[10,292,293,294,301,302,305],{},"除了内置字段外，您可以通过使用 ",[277,295,298],{"href":296,"rel":297},"https://zod.dev",[281],[14,299,300],{},"zod"," 模式向集合添加 ",[14,303,304],{},"schema"," 属性来定义自定义模式：",[93,307,309],{"className":95,"code":308,"filename":23,"language":97,"meta":98,"style":98},"import { defineCollection, defineContentConfig } from '@nuxt/content'\nimport { z } from 'zod'\n\nexport default defineContentConfig({\n  collections: {\n    blog: defineCollection({\n      type: 'page',\n      source: 'blog/*.md',\n      // 为博客集合定义自定义模式\n      schema: z.object({\n        tags: z.array(z.string()),\n        image: z.string(),\n        date: z.date()\n      })\n    })\n  }\n})\n",[14,310,311,333,352,356,368,376,389,403,418,423,442,469,487,505,513,520,525],{"__ignoreMap":98},[102,312,313,315,317,319,321,323,325,327,329,331],{"class":104,"line":105},[102,314,109],{"class":108},[102,316,113],{"class":112},[102,318,117],{"class":116},[102,320,120],{"class":112},[102,322,123],{"class":116},[102,324,126],{"class":112},[102,326,129],{"class":108},[102,328,132],{"class":112},[102,330,136],{"class":135},[102,332,139],{"class":112},[102,334,335,337,339,342,344,346,348,350],{"class":104,"line":142},[102,336,109],{"class":108},[102,338,113],{"class":112},[102,340,341],{"class":116}," z",[102,343,126],{"class":112},[102,345,129],{"class":108},[102,347,132],{"class":112},[102,349,300],{"class":135},[102,351,139],{"class":112},[102,353,354],{"class":104,"line":149},[102,355,146],{"emptyLinePlaceholder":145},[102,357,358,360,362,364,366],{"class":104,"line":167},[102,359,152],{"class":108},[102,361,155],{"class":108},[102,363,123],{"class":158},[102,365,161],{"class":116},[102,367,164],{"class":112},[102,369,370,372,374],{"class":104,"line":180},[102,371,171],{"class":170},[102,373,174],{"class":112},[102,375,177],{"class":112},[102,377,378,381,383,385,387],{"class":104,"line":194},[102,379,380],{"class":170},"    blog",[102,382,174],{"class":112},[102,384,117],{"class":158},[102,386,161],{"class":116},[102,388,164],{"class":112},[102,390,391,393,395,397,399,401],{"class":104,"line":201},[102,392,204],{"class":170},[102,394,174],{"class":112},[102,396,132],{"class":112},[102,398,211],{"class":135},[102,400,214],{"class":112},[102,402,217],{"class":112},[102,404,405,407,409,411,414,416],{"class":104,"line":220},[102,406,229],{"class":170},[102,408,174],{"class":112},[102,410,132],{"class":112},[102,412,413],{"class":135},"blog/*.md",[102,415,214],{"class":112},[102,417,217],{"class":112},[102,419,420],{"class":104,"line":226},[102,421,422],{"class":197},"      // 为博客集合定义自定义模式\n",[102,424,425,428,430,432,435,438,440],{"class":104,"line":243},[102,426,427],{"class":170},"      schema",[102,429,174],{"class":112},[102,431,341],{"class":116},[102,433,434],{"class":112},".",[102,436,437],{"class":158},"object",[102,439,161],{"class":116},[102,441,164],{"class":112},[102,443,444,447,449,451,453,456,459,461,464,467],{"class":104,"line":252},[102,445,446],{"class":170},"        tags",[102,448,174],{"class":112},[102,450,341],{"class":116},[102,452,434],{"class":112},[102,454,455],{"class":158},"array",[102,457,458],{"class":116},"(z",[102,460,434],{"class":112},[102,462,463],{"class":158},"string",[102,465,466],{"class":116},"())",[102,468,217],{"class":112},[102,470,471,474,476,478,480,482,485],{"class":104,"line":258},[102,472,473],{"class":170},"        image",[102,475,174],{"class":112},[102,477,341],{"class":116},[102,479,434],{"class":112},[102,481,463],{"class":158},[102,483,484],{"class":116},"()",[102,486,217],{"class":112},[102,488,490,493,495,497,499,502],{"class":104,"line":489},13,[102,491,492],{"class":170},"        date",[102,494,174],{"class":112},[102,496,341],{"class":116},[102,498,434],{"class":112},[102,500,501],{"class":158},"date",[102,503,504],{"class":116},"()\n",[102,506,508,511],{"class":104,"line":507},14,[102,509,510],{"class":112},"      }",[102,512,249],{"class":116},[102,514,516,518],{"class":104,"line":515},15,[102,517,246],{"class":112},[102,519,249],{"class":116},[102,521,523],{"class":104,"line":522},16,[102,524,255],{"class":112},[102,526,528,530],{"class":104,"line":527},17,[102,529,261],{"class":112},[102,531,249],{"class":116},[533,534,535],"note",{},[10,536,537,539,540,543,544,549],{},[14,538,136],{}," 暴露了一个 ",[14,541,542],{},"z"," 对象，其中包含一组用于常见数据类型的 Zod 模式。查看 ",[277,545,548],{"href":546,"rel":547},"https://github.com/colinhacks/zod",[281],"Zod 的 README"," 以获取有关 Zod 工作原理和可用功能的完整文档。",[551,552,553],"tip",{},[10,554,555],{},"您可以定义任意数量的集合来组织不同类型的内容。",[285,557,558],{"id":558},"数据库索引",[10,560,561],{},"通过在集合列上定义索引来优化查询性能。索引对于用于筛选、排序或查找的字段特别有用。",[93,563,565],{"className":95,"code":564,"filename":23,"language":97,"meta":98,"style":98},"import { defineCollection, defineContentConfig } from '@nuxt/content'\nimport { z } from 'zod'\n\nexport default defineContentConfig({\n  collections: {\n    products: defineCollection({\n      type: 'data',\n      source: 'products/*.json',\n      schema: z.object({\n        sku: z.string(),\n        price: z.number(),\n        category: z.string(),\n        inStock: z.boolean(),\n      }),\n      indexes: [\n        // 单列索引\n        { columns: ['category'] },\n        { columns: ['price'] },\n\n        // 用于类别 + 价格筛选的复合索引\n        { columns: ['category', 'price'] },\n\n        // 确保 SKU 唯一性的唯一索引\n        { columns: ['sku'], unique: true },\n\n        // 自定义索引名称（可选）\n        { columns: ['inStock', 'category'], name: 'idx_stock_category' },\n      ],\n    }),\n  },\n})\n",[14,566,567,589,607,611,623,631,644,659,674,690,707,725,742,760,769,779,784,810,832,837,843,872,877,883,918,923,929,973,981,990,996],{"__ignoreMap":98},[102,568,569,571,573,575,577,579,581,583,585,587],{"class":104,"line":105},[102,570,109],{"class":108},[102,572,113],{"class":112},[102,574,117],{"class":116},[102,576,120],{"class":112},[102,578,123],{"class":116},[102,580,126],{"class":112},[102,582,129],{"class":108},[102,584,132],{"class":112},[102,586,136],{"class":135},[102,588,139],{"class":112},[102,590,591,593,595,597,599,601,603,605],{"class":104,"line":142},[102,592,109],{"class":108},[102,594,113],{"class":112},[102,596,341],{"class":116},[102,598,126],{"class":112},[102,600,129],{"class":108},[102,602,132],{"class":112},[102,604,300],{"class":135},[102,606,139],{"class":112},[102,608,609],{"class":104,"line":149},[102,610,146],{"emptyLinePlaceholder":145},[102,612,613,615,617,619,621],{"class":104,"line":167},[102,614,152],{"class":108},[102,616,155],{"class":108},[102,618,123],{"class":158},[102,620,161],{"class":116},[102,622,164],{"class":112},[102,624,625,627,629],{"class":104,"line":180},[102,626,171],{"class":170},[102,628,174],{"class":112},[102,630,177],{"class":112},[102,632,633,636,638,640,642],{"class":104,"line":194},[102,634,635],{"class":170},"    products",[102,637,174],{"class":112},[102,639,117],{"class":158},[102,641,161],{"class":116},[102,643,164],{"class":112},[102,645,646,648,650,652,655,657],{"class":104,"line":201},[102,647,204],{"class":170},[102,649,174],{"class":112},[102,651,132],{"class":112},[102,653,654],{"class":135},"data",[102,656,214],{"class":112},[102,658,217],{"class":112},[102,660,661,663,665,667,670,672],{"class":104,"line":220},[102,662,229],{"class":170},[102,664,174],{"class":112},[102,666,132],{"class":112},[102,668,669],{"class":135},"products/*.json",[102,671,214],{"class":112},[102,673,217],{"class":112},[102,675,676,678,680,682,684,686,688],{"class":104,"line":226},[102,677,427],{"class":170},[102,679,174],{"class":112},[102,681,341],{"class":116},[102,683,434],{"class":112},[102,685,437],{"class":158},[102,687,161],{"class":116},[102,689,164],{"class":112},[102,691,692,695,697,699,701,703,705],{"class":104,"line":243},[102,693,694],{"class":170},"        sku",[102,696,174],{"class":112},[102,698,341],{"class":116},[102,700,434],{"class":112},[102,702,463],{"class":158},[102,704,484],{"class":116},[102,706,217],{"class":112},[102,708,709,712,714,716,718,721,723],{"class":104,"line":252},[102,710,711],{"class":170},"        price",[102,713,174],{"class":112},[102,715,341],{"class":116},[102,717,434],{"class":112},[102,719,720],{"class":158},"number",[102,722,484],{"class":116},[102,724,217],{"class":112},[102,726,727,730,732,734,736,738,740],{"class":104,"line":258},[102,728,729],{"class":170},"        category",[102,731,174],{"class":112},[102,733,341],{"class":116},[102,735,434],{"class":112},[102,737,463],{"class":158},[102,739,484],{"class":116},[102,741,217],{"class":112},[102,743,744,747,749,751,753,756,758],{"class":104,"line":489},[102,745,746],{"class":170},"        inStock",[102,748,174],{"class":112},[102,750,341],{"class":116},[102,752,434],{"class":112},[102,754,755],{"class":158},"boolean",[102,757,484],{"class":116},[102,759,217],{"class":112},[102,761,762,764,767],{"class":104,"line":507},[102,763,510],{"class":112},[102,765,766],{"class":116},")",[102,768,217],{"class":112},[102,770,771,774,776],{"class":104,"line":515},[102,772,773],{"class":170},"      indexes",[102,775,174],{"class":112},[102,777,778],{"class":116}," [\n",[102,780,781],{"class":104,"line":522},[102,782,783],{"class":197},"        // 单列索引\n",[102,785,786,789,792,794,797,799,802,804,807],{"class":104,"line":527},[102,787,788],{"class":112},"        {",[102,790,791],{"class":170}," columns",[102,793,174],{"class":112},[102,795,796],{"class":116}," [",[102,798,214],{"class":112},[102,800,801],{"class":135},"category",[102,803,214],{"class":112},[102,805,806],{"class":116},"] ",[102,808,809],{"class":112},"},\n",[102,811,813,815,817,819,821,823,826,828,830],{"class":104,"line":812},18,[102,814,788],{"class":112},[102,816,791],{"class":170},[102,818,174],{"class":112},[102,820,796],{"class":116},[102,822,214],{"class":112},[102,824,825],{"class":135},"price",[102,827,214],{"class":112},[102,829,806],{"class":116},[102,831,809],{"class":112},[102,833,835],{"class":104,"line":834},19,[102,836,146],{"emptyLinePlaceholder":145},[102,838,840],{"class":104,"line":839},20,[102,841,842],{"class":197},"        // 用于类别 + 价格筛选的复合索引\n",[102,844,846,848,850,852,854,856,858,860,862,864,866,868,870],{"class":104,"line":845},21,[102,847,788],{"class":112},[102,849,791],{"class":170},[102,851,174],{"class":112},[102,853,796],{"class":116},[102,855,214],{"class":112},[102,857,801],{"class":135},[102,859,214],{"class":112},[102,861,120],{"class":112},[102,863,132],{"class":112},[102,865,825],{"class":135},[102,867,214],{"class":112},[102,869,806],{"class":116},[102,871,809],{"class":112},[102,873,875],{"class":104,"line":874},22,[102,876,146],{"emptyLinePlaceholder":145},[102,878,880],{"class":104,"line":879},23,[102,881,882],{"class":197},"        // 确保 SKU 唯一性的唯一索引\n",[102,884,886,888,890,892,894,896,899,901,904,906,909,911,915],{"class":104,"line":885},24,[102,887,788],{"class":112},[102,889,791],{"class":170},[102,891,174],{"class":112},[102,893,796],{"class":116},[102,895,214],{"class":112},[102,897,898],{"class":135},"sku",[102,900,214],{"class":112},[102,902,903],{"class":116},"]",[102,905,120],{"class":112},[102,907,908],{"class":170}," unique",[102,910,174],{"class":112},[102,912,914],{"class":913},"sfNiH"," true",[102,916,917],{"class":112}," },\n",[102,919,921],{"class":104,"line":920},25,[102,922,146],{"emptyLinePlaceholder":145},[102,924,926],{"class":104,"line":925},26,[102,927,928],{"class":197},"        // 自定义索引名称（可选）\n",[102,930,932,934,936,938,940,942,945,947,949,951,953,955,957,959,962,964,966,969,971],{"class":104,"line":931},27,[102,933,788],{"class":112},[102,935,791],{"class":170},[102,937,174],{"class":112},[102,939,796],{"class":116},[102,941,214],{"class":112},[102,943,944],{"class":135},"inStock",[102,946,214],{"class":112},[102,948,120],{"class":112},[102,950,132],{"class":112},[102,952,801],{"class":135},[102,954,214],{"class":112},[102,956,903],{"class":116},[102,958,120],{"class":112},[102,960,961],{"class":170}," name",[102,963,174],{"class":112},[102,965,132],{"class":112},[102,967,968],{"class":135},"idx_stock_category",[102,970,214],{"class":112},[102,972,917],{"class":112},[102,974,976,979],{"class":104,"line":975},28,[102,977,978],{"class":116},"      ]",[102,980,217],{"class":112},[102,982,984,986,988],{"class":104,"line":983},29,[102,985,246],{"class":112},[102,987,766],{"class":116},[102,989,217],{"class":112},[102,991,993],{"class":104,"line":992},30,[102,994,995],{"class":112},"  },\n",[102,997,999,1001],{"class":104,"line":998},31,[102,1000,261],{"class":112},[102,1002,249],{"class":116},[533,1004,1005],{},[10,1006,1007],{},"索引在生成数据库模式时自动创建。它们适用于所有支持的数据库：SQLite、Cloudflare D1、PostgreSQL、LibSQL 和 PGlite。",[551,1009,1011],{"icon":1010},"i-ph-lightbulb",[10,1012,1013,1016,1017,1020],{},[52,1014,1015],{},"Cloudflare D1 成本优化","：使用索引时，对索引列的 ",[14,1018,1019],{},"WHERE"," 子句在只有一个匹配项时仅计为 1 次行读取。如果没有索引，D1 会计算表中扫描的所有行，这会显著增加您的读取成本。索引可以极大地减少您的 D1 账单。",[10,1022,1023],{},[52,1024,1025],{},"索引配置选项：",[46,1027,1028,1036,1052],{},[49,1029,1030,1035],{},[52,1031,1032],{},[14,1033,1034],{},"columns","（必需）：要包含在索引中的列名数组",[49,1037,1038,1043,1044,1047,1048,1051],{},[52,1039,1040],{},[14,1041,1042],{},"unique","（可选）：设置为 ",[14,1045,1046],{},"true"," 以创建唯一索引（默认：",[14,1049,1050],{},"false","）",[49,1053,1054,1059,1060],{},[52,1055,1056],{},[14,1057,1058],{},"name","（可选）：自定义索引名称。如果省略，会自动生成为 ",[14,1061,1062],{},"idx_{collection}_{column1}_{column2}",[10,1064,1065],{},[52,1066,1067],{},"性能提示：",[46,1069,1070,1077,1083,1086],{},[49,1071,1072,1073,1076],{},"为 ",[14,1074,1075],{},"where()"," 查询中使用的列创建索引以加快筛选速度",[49,1078,1072,1079,1082],{},[14,1080,1081],{},"sort()"," 中使用的列创建索引以优化排序",[49,1084,1085],{},"对按多个列进行筛选/排序的查询使用复合索引",[49,1087,1088],{},"唯一索引自动强制数据唯一性约束",[35,1090,1091],{"id":1091},"查询集合",[10,1093,1094,1095,1101],{},"使用 ",[277,1096,1098],{"href":1097},"/docs/utils/query-collection",[14,1099,1100],{},"queryCollection"," 工具从集合中获取一个或所有项目：",[93,1103,1108],{"className":1104,"code":1105,"filename":1106,"language":1107,"meta":98,"style":98},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst { data: posts } = await useAsyncData('blog', () => queryCollection('blog').all())\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>博客\u003C/h1>\n    \u003Cul>\n      \u003Cli v-for=\"post in posts\" :key=\"post.id\">\n        \u003CNuxtLink :to=\"post.path\">{{ post.title }}\u003C/NuxtLink>\n      \u003C/li>\n    \u003C/ul>\n  \u003C/div>\n\u003C/template>\n","pages/blog.vue","vue",[14,1109,1110,1138,1202,1211,1215,1224,1234,1254,1262,1308,1352,1361,1370,1379],{"__ignoreMap":98},[102,1111,1112,1115,1118,1122,1125,1128,1131,1133,1135],{"class":104,"line":105},[102,1113,1114],{"class":112},"\u003C",[102,1116,1117],{"class":170},"script",[102,1119,1121],{"class":1120},"spNyl"," setup",[102,1123,1124],{"class":1120}," lang",[102,1126,1127],{"class":112},"=",[102,1129,1130],{"class":112},"\"",[102,1132,97],{"class":135},[102,1134,1130],{"class":112},[102,1136,1137],{"class":112},">\n",[102,1139,1140,1143,1145,1148,1150,1153,1155,1158,1161,1164,1166,1168,1171,1173,1175,1178,1181,1184,1186,1188,1190,1192,1194,1196,1199],{"class":104,"line":142},[102,1141,1142],{"class":1120},"const",[102,1144,113],{"class":112},[102,1146,1147],{"class":170}," data",[102,1149,174],{"class":112},[102,1151,1152],{"class":116}," posts ",[102,1154,261],{"class":112},[102,1156,1157],{"class":112}," =",[102,1159,1160],{"class":108}," await",[102,1162,1163],{"class":158}," useAsyncData",[102,1165,161],{"class":116},[102,1167,214],{"class":112},[102,1169,1170],{"class":135},"blog",[102,1172,214],{"class":112},[102,1174,120],{"class":112},[102,1176,1177],{"class":112}," ()",[102,1179,1180],{"class":1120}," =>",[102,1182,1183],{"class":158}," queryCollection",[102,1185,161],{"class":116},[102,1187,214],{"class":112},[102,1189,1170],{"class":135},[102,1191,214],{"class":112},[102,1193,766],{"class":116},[102,1195,434],{"class":112},[102,1197,1198],{"class":158},"all",[102,1200,1201],{"class":116},"())\n",[102,1203,1204,1207,1209],{"class":104,"line":149},[102,1205,1206],{"class":112},"\u003C/",[102,1208,1117],{"class":170},[102,1210,1137],{"class":112},[102,1212,1213],{"class":104,"line":167},[102,1214,146],{"emptyLinePlaceholder":145},[102,1216,1217,1219,1222],{"class":104,"line":180},[102,1218,1114],{"class":112},[102,1220,1221],{"class":170},"template",[102,1223,1137],{"class":112},[102,1225,1226,1229,1232],{"class":104,"line":194},[102,1227,1228],{"class":112},"  \u003C",[102,1230,1231],{"class":170},"div",[102,1233,1137],{"class":112},[102,1235,1236,1239,1242,1245,1248,1250,1252],{"class":104,"line":201},[102,1237,1238],{"class":112},"    \u003C",[102,1240,1241],{"class":170},"h1",[102,1243,1244],{"class":112},">",[102,1246,1247],{"class":116},"博客",[102,1249,1206],{"class":112},[102,1251,1241],{"class":170},[102,1253,1137],{"class":112},[102,1255,1256,1258,1260],{"class":104,"line":220},[102,1257,1238],{"class":112},[102,1259,46],{"class":170},[102,1261,1137],{"class":112},[102,1263,1264,1267,1269,1272,1274,1276,1279,1282,1285,1287,1290,1293,1295,1297,1299,1301,1304,1306],{"class":104,"line":226},[102,1265,1266],{"class":112},"      \u003C",[102,1268,49],{"class":170},[102,1270,1271],{"class":108}," v-for",[102,1273,1127],{"class":112},[102,1275,1130],{"class":112},[102,1277,1278],{"class":116},"post",[102,1280,1281],{"class":112}," in ",[102,1283,1284],{"class":116},"posts",[102,1286,1130],{"class":112},[102,1288,1289],{"class":112}," :",[102,1291,1292],{"class":1120},"key",[102,1294,1127],{"class":112},[102,1296,1130],{"class":112},[102,1298,1278],{"class":116},[102,1300,434],{"class":112},[102,1302,1303],{"class":116},"id",[102,1305,1130],{"class":112},[102,1307,1137],{"class":112},[102,1309,1310,1313,1316,1318,1321,1323,1325,1327,1329,1332,1334,1337,1340,1342,1345,1348,1350],{"class":104,"line":243},[102,1311,1312],{"class":112},"        \u003C",[102,1314,1315],{"class":170},"NuxtLink",[102,1317,1289],{"class":112},[102,1319,1320],{"class":1120},"to",[102,1322,1127],{"class":112},[102,1324,1130],{"class":112},[102,1326,1278],{"class":116},[102,1328,434],{"class":112},[102,1330,1331],{"class":116},"path",[102,1333,1130],{"class":112},[102,1335,1336],{"class":112},">{{",[102,1338,1339],{"class":116}," post",[102,1341,434],{"class":112},[102,1343,1344],{"class":116},"title ",[102,1346,1347],{"class":112},"}}\u003C/",[102,1349,1315],{"class":170},[102,1351,1137],{"class":112},[102,1353,1354,1357,1359],{"class":104,"line":252},[102,1355,1356],{"class":112},"      \u003C/",[102,1358,49],{"class":170},[102,1360,1137],{"class":112},[102,1362,1363,1366,1368],{"class":104,"line":258},[102,1364,1365],{"class":112},"    \u003C/",[102,1367,46],{"class":170},[102,1369,1137],{"class":112},[102,1371,1372,1375,1377],{"class":104,"line":489},[102,1373,1374],{"class":112},"  \u003C/",[102,1376,1231],{"class":170},[102,1378,1137],{"class":112},[102,1380,1381,1383,1385],{"class":104,"line":507},[102,1382,1206],{"class":112},[102,1384,1221],{"class":170},[102,1386,1137],{"class":112},[533,1388,1389],{"to":1097},[10,1390,1391,1392,1395],{},"在我们的 ",[14,1393,1394],{},"queryCollections"," API 文档中了解更多可用的查询选项。",[35,1397,1399],{"id":1398},"definecollection","defineCollection()",[10,1401,1402,1405],{},[14,1403,1404],{},"defineCollection"," 函数用于在内容配置中定义一个集合。以下是其 TypeScript 签名：",[93,1407,1409],{"className":95,"code":1408,"language":97,"meta":98,"style":98},"function defineCollection(collection: Collection): DefinedCollection\n\ntype Collection = {\n  // 确定内容如何处理\n  type: 'page' | 'data'\n  // 指定内容位置\n  source?: string | CollectionSource\n  // 用于内容验证和类型的 Zod 模式\n  schema?: ZodObject\u003CT>\n  // 用于查询优化的数据库索引\n  indexes?: CollectionIndex[]\n}\n\ntype CollectionIndex = {\n  // 要包含在索引中的列名\n  columns: string[]\n  // 可选的自定义索引名称\n  name?: string\n  // 这是否是唯一索引（默认：false）\n  unique?: boolean\n}\n",[14,1410,1411,1436,1440,1451,1456,1478,1483,1499,1504,1521,1526,1539,1544,1548,1558,1563,1574,1579,1589,1594,1604],{"__ignoreMap":98},[102,1412,1413,1416,1418,1420,1424,1426,1430,1433],{"class":104,"line":105},[102,1414,1415],{"class":1120},"function",[102,1417,117],{"class":158},[102,1419,161],{"class":112},[102,1421,1423],{"class":1422},"sHdIc","collection",[102,1425,174],{"class":112},[102,1427,1429],{"class":1428},"sBMFI"," Collection",[102,1431,1432],{"class":112},"):",[102,1434,1435],{"class":1428}," DefinedCollection\n",[102,1437,1438],{"class":104,"line":142},[102,1439,146],{"emptyLinePlaceholder":145},[102,1441,1442,1445,1447,1449],{"class":104,"line":149},[102,1443,1444],{"class":1120},"type",[102,1446,1429],{"class":1428},[102,1448,1157],{"class":112},[102,1450,177],{"class":112},[102,1452,1453],{"class":104,"line":167},[102,1454,1455],{"class":197},"  // 确定内容如何处理\n",[102,1457,1458,1461,1463,1465,1467,1469,1472,1474,1476],{"class":104,"line":180},[102,1459,1460],{"class":170},"  type",[102,1462,174],{"class":112},[102,1464,132],{"class":112},[102,1466,211],{"class":135},[102,1468,214],{"class":112},[102,1470,1471],{"class":112}," |",[102,1473,132],{"class":112},[102,1475,654],{"class":135},[102,1477,139],{"class":112},[102,1479,1480],{"class":104,"line":194},[102,1481,1482],{"class":197},"  // 指定内容位置\n",[102,1484,1485,1488,1491,1494,1496],{"class":104,"line":201},[102,1486,1487],{"class":170},"  source",[102,1489,1490],{"class":112},"?:",[102,1492,1493],{"class":1428}," string",[102,1495,1471],{"class":112},[102,1497,1498],{"class":1428}," CollectionSource\n",[102,1500,1501],{"class":104,"line":220},[102,1502,1503],{"class":197},"  // 用于内容验证和类型的 Zod 模式\n",[102,1505,1506,1509,1511,1514,1516,1519],{"class":104,"line":226},[102,1507,1508],{"class":170},"  schema",[102,1510,1490],{"class":112},[102,1512,1513],{"class":1428}," ZodObject",[102,1515,1114],{"class":112},[102,1517,1518],{"class":1428},"T",[102,1520,1137],{"class":112},[102,1522,1523],{"class":104,"line":243},[102,1524,1525],{"class":197},"  // 用于查询优化的数据库索引\n",[102,1527,1528,1531,1533,1536],{"class":104,"line":252},[102,1529,1530],{"class":170},"  indexes",[102,1532,1490],{"class":112},[102,1534,1535],{"class":1428}," CollectionIndex",[102,1537,1538],{"class":116},"[]\n",[102,1540,1541],{"class":104,"line":258},[102,1542,1543],{"class":112},"}\n",[102,1545,1546],{"class":104,"line":489},[102,1547,146],{"emptyLinePlaceholder":145},[102,1549,1550,1552,1554,1556],{"class":104,"line":507},[102,1551,1444],{"class":1120},[102,1553,1535],{"class":1428},[102,1555,1157],{"class":112},[102,1557,177],{"class":112},[102,1559,1560],{"class":104,"line":515},[102,1561,1562],{"class":197},"  // 要包含在索引中的列名\n",[102,1564,1565,1568,1570,1572],{"class":104,"line":522},[102,1566,1567],{"class":170},"  columns",[102,1569,174],{"class":112},[102,1571,1493],{"class":1428},[102,1573,1538],{"class":116},[102,1575,1576],{"class":104,"line":527},[102,1577,1578],{"class":197},"  // 可选的自定义索引名称\n",[102,1580,1581,1584,1586],{"class":104,"line":812},[102,1582,1583],{"class":170},"  name",[102,1585,1490],{"class":112},[102,1587,1588],{"class":1428}," string\n",[102,1590,1591],{"class":104,"line":834},[102,1592,1593],{"class":197},"  // 这是否是唯一索引（默认：false）\n",[102,1595,1596,1599,1601],{"class":104,"line":839},[102,1597,1598],{"class":170},"  unique",[102,1600,1490],{"class":112},[102,1602,1603],{"class":1428}," boolean\n",[102,1605,1606],{"class":104,"line":845},[102,1607,1543],{"class":112},[533,1609,1611],{"to":1610},"/docs/collections/types",[10,1612,1613],{},"了解有关集合类型的更多信息。",[93,1615,1617],{"className":95,"code":1616,"language":97,"meta":98,"style":98},"type CollectionSource = {\n  // 用于内容匹配的 Glob 模式\n  include: string\n  // .path 前缀（仅适用于 'page' 类型）\n  prefix?: string\n  // 用于排除内容的 Glob 模式\n  exclude?: string[]\n  // 用于内容匹配的根目录\n  cwd?: string\n  // 远程 git 仓库 URL（例如，https://github.com/nuxt/content）\n  repository?: string\n  // 私有仓库的认证令牌（例如，GitHub 个人访问令牌）\n  authToken?: string\n}\n",[14,1618,1619,1630,1635,1644,1649,1658,1663,1674,1679,1688,1693,1702,1707,1716],{"__ignoreMap":98},[102,1620,1621,1623,1626,1628],{"class":104,"line":105},[102,1622,1444],{"class":1120},[102,1624,1625],{"class":1428}," CollectionSource",[102,1627,1157],{"class":112},[102,1629,177],{"class":112},[102,1631,1632],{"class":104,"line":142},[102,1633,1634],{"class":197},"  // 用于内容匹配的 Glob 模式\n",[102,1636,1637,1640,1642],{"class":104,"line":149},[102,1638,1639],{"class":170},"  include",[102,1641,174],{"class":112},[102,1643,1588],{"class":1428},[102,1645,1646],{"class":104,"line":167},[102,1647,1648],{"class":197},"  // .path 前缀（仅适用于 'page' 类型）\n",[102,1650,1651,1654,1656],{"class":104,"line":180},[102,1652,1653],{"class":170},"  prefix",[102,1655,1490],{"class":112},[102,1657,1588],{"class":1428},[102,1659,1660],{"class":104,"line":194},[102,1661,1662],{"class":197},"  // 用于排除内容的 Glob 模式\n",[102,1664,1665,1668,1670,1672],{"class":104,"line":201},[102,1666,1667],{"class":170},"  exclude",[102,1669,1490],{"class":112},[102,1671,1493],{"class":1428},[102,1673,1538],{"class":116},[102,1675,1676],{"class":104,"line":220},[102,1677,1678],{"class":197},"  // 用于内容匹配的根目录\n",[102,1680,1681,1684,1686],{"class":104,"line":226},[102,1682,1683],{"class":170},"  cwd",[102,1685,1490],{"class":112},[102,1687,1588],{"class":1428},[102,1689,1690],{"class":104,"line":243},[102,1691,1692],{"class":197},"  // 远程 git 仓库 URL（例如，https://github.com/nuxt/content）\n",[102,1694,1695,1698,1700],{"class":104,"line":252},[102,1696,1697],{"class":170},"  repository",[102,1699,1490],{"class":112},[102,1701,1588],{"class":1428},[102,1703,1704],{"class":104,"line":258},[102,1705,1706],{"class":197},"  // 私有仓库的认证令牌（例如，GitHub 个人访问令牌）\n",[102,1708,1709,1712,1714],{"class":104,"line":489},[102,1710,1711],{"class":170},"  authToken",[102,1713,1490],{"class":112},[102,1715,1588],{"class":1428},[102,1717,1718],{"class":104,"line":507},[102,1719,1543],{"class":112},[533,1721,1723],{"to":1722},"/docs/collections/sources",[10,1724,1725],{},"了解有关集合源的更多信息。",[10,1727,1728],{},"该函数返回已定义的集合对象。",[1730,1731,1732],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":98,"searchDepth":142,"depth":142,"links":1734},[1735,1736,1740,1741],{"id":37,"depth":142,"text":38},{"id":82,"depth":142,"text":82,"children":1737},[1738,1739],{"id":287,"depth":149,"text":287},{"id":558,"depth":149,"text":558},{"id":1091,"depth":142,"text":1091},{"id":1398,"depth":142,"text":1399},"进阶教程","了解如何在 Nuxt 应用中定义和配置内容集合。","md",null,{},{"title":1748,"icon":1749},"定义","i-lucide-file-text","/docs/framework/define",{"title":5,"description":1743},"docs/framework/define","DC_a2gGAYT2k7Fx8Ju2BKmGApG0dTi_EQs8K2jZljYQ",[1745,1755],{"title":1756,"path":1757,"stem":1758,"icon":1759,"children":-1},"前置准备","/docs/framework/prerequisites","docs/framework/prerequisites","i-lucide-database",[1761,1763,1765,1771,1776,1782,1789,1795,1801,1807,1812,1817],{"title":5,"path":1750,"category":1742,"order":1745,"navigation":1762},{"title":1748,"icon":1749},{"title":1756,"path":1757,"category":1742,"order":1745,"navigation":1764},{"title":1756,"icon":1759},{"title":1766,"path":1767,"category":1742,"order":1745,"navigation":1768},"集合源","/docs/framework/sources",{"title":1769,"icon":1770},"源","i-lucide-upload",{"title":1772,"path":1773,"category":1742,"order":1745,"navigation":1774},"集合类型","/docs/framework/types",{"title":1775,"icon":1749},"类型",{"title":1777,"path":1778,"category":1742,"order":1745,"navigation":1779},"模式验证器","/docs/framework/validators",{"title":1780,"icon":1781},"验证器","i-lucide-check-circle",{"title":1783,"path":1784,"category":1785,"order":1745,"navigation":1786},"宝塔面板部署","/docs/introduction/bt","入门指南",{"title":1787,"icon":1788},"宝塔部署","i-lucide-server",{"title":1790,"path":1791,"category":1785,"order":1745,"navigation":1792},"开源与商业化","/docs/introduction/configuration",{"title":1793,"icon":1794},"商业化","i-lucide-dollar-sign",{"title":1796,"path":1797,"category":1785,"order":1745,"navigation":1798},"智言AI介绍","/docs/introduction/start",{"title":1799,"icon":1800},"介绍","i-lucide-info",{"title":1802,"path":1803,"category":1785,"order":1745,"navigation":1804},"迁移指南","/docs/introduction/migration",{"title":1805,"icon":1806},"迁移","i-lucide-arrow-right",{"title":1808,"path":1809,"category":1785,"order":1745,"navigation":1810},"手动安装","/docs/introduction/manual-installation",{"title":1808,"icon":1811},"i-lucide-terminal",{"title":1813,"path":1814,"category":1785,"order":1745,"navigation":1815},"Docker安装","/docs/introduction/docker-installation",{"title":1813,"icon":1816},"i-lucide-box",{"title":1818,"path":1819,"category":1785,"order":1745,"navigation":1820},"演示环境","/docs/introduction/demo",{"title":1818,"icon":1821},"i-lucide-download",1775201089131]