node-blog/fix_database.js
2025-06-24 11:42:12 +08:00

103 lines
3.0 KiB
JavaScript

const mongoose = require('mongoose');
const Post = require('./models/Post');
// 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/blog', {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log('数据库连接成功');
fixDatabase();
})
.catch(err => {
console.error('数据库连接失败:', err);
process.exit(1);
});
async function fixDatabase() {
try {
console.log('开始检查和修复数据库...\n');
// 查找所有文章
const posts = await Post.find({});
console.log(`找到 ${posts.length} 篇文章`);
let fixedCount = 0;
for (let post of posts) {
let needsUpdate = false;
let updates = {};
// 检查并修复title字段
if (!post.title || post.title.trim() === '') {
updates.title = '无标题';
needsUpdate = true;
console.log(`修复文章 ${post._id} 的标题`);
}
// 检查并修复content字段
if (!post.content || post.content.trim() === '') {
updates.content = '暂无内容';
needsUpdate = true;
console.log(`修复文章 ${post._id} 的内容`);
}
// 检查并修复author字段
if (!post.author || post.author.trim() === '') {
updates.author = '未知作者';
needsUpdate = true;
console.log(`修复文章 ${post._id} 的作者`);
}
// 检查并修复category字段
if (!post.category || post.category.trim() === '') {
updates.category = '未分类';
needsUpdate = true;
console.log(`修复文章 ${post._id} 的分类`);
}
// 添加缺失的字段
if (post.isPublished === undefined) {
updates.isPublished = true;
needsUpdate = true;
console.log(`为文章 ${post._id} 添加发布状态`);
}
if (post.isTop === undefined) {
updates.isTop = false;
needsUpdate = true;
console.log(`为文章 ${post._id} 添加置顶状态`);
}
if (post.updatedAt === undefined) {
updates.updatedAt = post.createdAt || new Date();
needsUpdate = true;
console.log(`为文章 ${post._id} 添加更新时间`);
}
// 更新数据库
if (needsUpdate) {
await Post.findByIdAndUpdate(post._id, updates);
fixedCount++;
}
}
console.log(`\n修复完成!共修复了 ${fixedCount} 篇文章`);
// 显示修复后的统计信息
const totalPosts = await Post.countDocuments();
const publishedPosts = await Post.countDocuments({ isPublished: true });
const topPosts = await Post.countDocuments({ isTop: true });
console.log('\n数据库统计信息:');
console.log(`- 总文章数: ${totalPosts}`);
console.log(`- 已发布: ${publishedPosts}`);
console.log(`- 置顶文章: ${topPosts}`);
mongoose.connection.close();
} catch (error) {
console.error('修复数据库失败:', error);
mongoose.connection.close();
}
}