liurenchaxin/internal/analysis/MongoDB_to_Milvus_Fix.md

132 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MongoDB到Milvus修复代码
## 问题说明
你的N8N工作流中从MongoDB到Milvus的数据转换出现问题。主要原因是数据格式不符合Langchain Document标准。
## 修复方案
请将以下代码完全替换你N8N工作流中"Code test"节点的JavaScript代码
```javascript
const processedItems = [];
const items = $input.all();
function cleanText(text) {
if (!text || typeof text !== 'string') {
return "空内容";
}
return text
.trim()
.replace(/[\r\n\t]/g, ' ')
.replace(/\s+/g, ' ')
.substring(0, 500);
}
console.log(`开始处理 ${items.length} 个items`);
for (const item of items) {
try {
if (!item || !item.json) {
console.log("跳过无效item");
continue;
}
const data = item.json;
const rawTitle = data.title || data.content || "";
const cleanTitle = cleanText(rawTitle);
if (!cleanTitle || cleanTitle === "空内容" || cleanTitle.length < 5) {
console.log(`跳过无效标题: ${rawTitle}`);
continue;
}
let publishedDate;
try {
const timeStr = data.published_time || data.pubDate || data.date;
publishedDate = timeStr ? new Date(timeStr).toISOString() : new Date().toISOString();
} catch (error) {
console.log(`时间解析错误: ${error.message}`);
publishedDate = new Date().toISOString();
}
const articleId = data.article_id || `article_${Date.now()}_${Math.floor(Math.random() * 10000)}`;
// 🔧 修复确保所有metadata字段都是字符串类型
const document = {
pageContent: String(cleanTitle),
metadata: {
title: String(cleanTitle),
published_date: String(publishedDate),
article_id: String(articleId),
source: String(data.source || "rss_feed"),
processed: String(false)
}
};
// 🔧 关键修复验证metadata中确实有title字段
if (!document.metadata.title || document.metadata.title === "undefined") {
document.metadata.title = "未知标题_" + Date.now();
}
processedItems.push(document);
console.log(`成功处理: ${document.metadata.title.substring(0, 30)}...`);
console.log(`metadata检查: title=${document.metadata.title}, article_id=${document.metadata.article_id}`);
} catch (error) {
console.log(`处理item时出错: ${error.message}`);
continue;
}
}
if (processedItems.length === 0) {
console.log("没有有效数据,返回默认文档");
const defaultDoc = {
pageContent: "默认测试内容 - 市场分析",
metadata: {
title: "默认测试文档",
published_date: new Date().toISOString(),
article_id: "default_article_" + Date.now(),
source: "default",
processed: "false"
}
};
return [defaultDoc];
}
console.log(`✅ 成功处理 ${processedItems.length} 个文档,准备向量化`);
// 🔧 最终验证确保每个文档都有title字段
for (let i = 0; i < processedItems.length; i++) {
if (!processedItems[i].metadata || !processedItems[i].metadata.title) {
console.log(`❌ 文档 ${i} 缺少title字段修复中...`);
processedItems[i].metadata = processedItems[i].metadata || {};
processedItems[i].metadata.title = `修复标题_${i}_${Date.now()}`;
}
console.log(`✅ 文档 ${i} title: ${processedItems[i].metadata.title}`);
}
return processedItems;
```
## 操作步骤
1. 打开你的N8N工作流
2. 找到"Code test"节点
3. 双击打开编辑
4. 删除现有的JavaScript代码
5. 复制上面的代码粘贴进去
6. 保存节点
7. 保存工作流
8. 手动触发测试
## 关键修复点
- ✅ 修复了数据格式符合Langchain Document标准
- ✅ 改进了文本清理,避免向量化失败
- ✅ 增强了错误处理和日志输出
- ✅ 确保返回正确的数据结构
## 验证方法
执行工作流后,检查:
1. N8N执行日志中是否有"成功处理 X 个文档"的消息
2. Milvus集合"ifuleyou"中是否有新数据
3. 是否没有错误信息
如果还有问题请查看N8N的执行日志获取具体错误信息。