/** * 初始化知识数据脚本 * 用于填充测试知识内容 */ const mongoose = require('mongoose') require('dotenv').config() // 导入知识模型 const Knowledge = require('../src/models/Knowledge') // 测试知识数据 const testKnowledgeData = [ // 一维知识 { title: '一维空间的基本概念', content: '一维空间是数学中最简单的空间形式,它只有长度这一个维度。在物理学中,一维空间可以用来描述直线运动,比如物体在直线上来回运动。一维空间的特点是所有点都在同一条直线上,没有宽度和高度。', dim: 1, category: 'concept', tags: ['一维', '空间', '数学'], status: 'approved', isPremium: false, requiredPoints: 0, price: 0 }, { title: '一维空间的数学表示', content: '在数学中,一维空间通常用实数轴来表示。实数轴上的每个点对应一个实数,点与点之间的距离就是它们对应实数的差的绝对值。一维空间中的向量只有一个分量,可以用一个实数来表示。', dim: 1, category: 'application', tags: ['一维', '数学', '实数轴'], status: 'approved', isPremium: false, requiredPoints: 0, price: 0 }, // 二维知识 { title: '二维空间的几何特性', content: '二维空间具有两个维度:长度和宽度。在二维空间中,我们可以定义平面几何图形,如点、线、三角形、圆形等。二维空间中的每个点可以用两个坐标(x, y)来表示。', dim: 2, category: 'concept', tags: ['二维', '几何', '平面'], status: 'approved', isPremium: false, requiredPoints: 10, price: 0 }, { title: '二维坐标系的应用', content: '二维坐标系在计算机图形学、地理信息系统、工程设计等领域有广泛应用。笛卡尔坐标系是最常见的二维坐标系,它使用相互垂直的x轴和y轴来定位平面上的点。', dim: 2, category: 'application', tags: ['二维', '坐标系', '应用'], status: 'approved', isPremium: false, requiredPoints: 20, price: 0 }, // 三维知识 { title: '理解三维空间', content: '三维空间是我们最熟悉的空间形式,它具有长度、宽度和高度三个维度。在三维空间中,物体具有体积,可以定义立体几何图形如立方体、球体、圆柱体等。', dim: 3, category: 'concept', tags: ['三维', '空间', '立体'], status: 'approved', isPremium: false, requiredPoints: 30, price: 0 }, { title: '三维建模技术', content: '三维建模技术在动画制作、游戏开发、建筑设计等领域有重要应用。常见的三维建模方法包括多边形建模、NURBS建模、体素建模等。', dim: 3, category: 'application', tags: ['三维', '建模', '技术'], status: 'approved', isPremium: false, requiredPoints: 40, price: 0 }, // 四维知识(付费内容) { title: '四维时空的概念', content: '四维时空是爱因斯坦相对论中的核心概念,它将三维空间与时间维度结合。在四维时空中,事件的发生不仅取决于空间位置,还取决于时间点。四维时空的几何特性由闵可夫斯基度规描述。', dim: 4, category: 'concept', tags: ['四维', '时空', '相对论'], status: 'approved', isPremium: true, requiredPoints: 0, price: 9.9 }, { title: '四维空间的可视化', content: '由于人类无法直接感知四维空间,科学家们开发了多种可视化技术。常见的方法包括投影法、切片法、颜色编码法等,帮助我们理解高维空间的特性。', dim: 4, category: 'application', tags: ['四维', '可视化', '高维'], status: 'approved', isPremium: true, requiredPoints: 0, price: 12.9 }, // 五维知识(高级付费内容) { title: '五维空间的物理意义', content: '五维空间理论在弦理论和卡鲁扎-克莱因理论中有重要应用。在五维空间中,除了三维空间和一维时间外,还可能存在额外的紧致维度。这些理论试图统一引力与其他基本力。', dim: 5, category: 'concept', tags: ['五维', '弦理论', '统一理论'], status: 'approved', isPremium: true, requiredPoints: 0, price: 19.9 }, { title: '高维空间的数学基础', content: '高维空间的数学研究涉及线性代数、微分几何、拓扑学等多个领域。n维空间中的点可以用n个坐标表示,距离和角度等概念可以通过推广低维空间的定义来建立。', dim: 5, category: 'application', tags: ['高维', '数学', '几何'], status: 'approved', isPremium: true, requiredPoints: 0, price: 24.9 } ] async function initKnowledgeData() { try { // 连接数据库 await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true }) console.log('✅ 数据库连接成功') // 清空现有知识数据(可选) await Knowledge.deleteMany({}) console.log('✅ 已清空现有知识数据') // 插入测试数据 const inserted = await Knowledge.insertMany(testKnowledgeData) console.log(`✅ 成功插入 ${inserted.length} 条知识数据`) // 显示插入的数据统计 const dimCounts = {} inserted.forEach(item => { dimCounts[item.dim] = (dimCounts[item.dim] || 0) + 1 }) console.log('📊 知识数据统计:') Object.keys(dimCounts).sort().forEach(dim => { console.log(` ${dim}维知识: ${dimCounts[dim]} 条`) }) const premiumCount = inserted.filter(item => item.isPremium).length const freeCount = inserted.length - premiumCount console.log(` 💰 付费内容: ${premiumCount} 条`) console.log(` 🆓 免费内容: ${freeCount} 条`) } catch (error) { console.error('❌ 初始化知识数据失败:', error) } finally { await mongoose.connection.close() console.log('🔚 数据库连接已关闭') } } // 执行初始化 if (require.main === module) { initKnowledgeData() } module.exports = { initKnowledgeData }