59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # n8n MongoDB去重配置
 | ||
| 
 | ||
| ## 方案1: JS函数 + MongoDB Upsert
 | ||
| 
 | ||
| ### JS函数节点配置
 | ||
| 使用 `scripts/n8n_minimal_news.js` 的代码,只做基本处理和本批次去重。
 | ||
| 
 | ||
| ### MongoDB节点配置
 | ||
| 1. **操作类型**: Update
 | ||
| 2. **Collection**: articles  
 | ||
| 3. **Update Key**: title (用标题作为唯一键)
 | ||
| 4. **Upsert**: 启用 ✅
 | ||
| 5. **Update Document**:
 | ||
| ```json
 | ||
| {
 | ||
|   "$setOnInsert": {
 | ||
|     "id": "={{$json.id}}",
 | ||
|     "title": "={{$json.title}}",
 | ||
|     "published_time": "={{$json.published_time}}",
 | ||
|     "source_url": "={{$json.source_url}}",
 | ||
|     "created_at": "={{new Date().toISOString()}}"
 | ||
|   },
 | ||
|   "$set": {
 | ||
|     "last_seen": "={{new Date().toISOString()}}"
 | ||
|   }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ## 方案2: 纯MongoDB节点去重
 | ||
| 
 | ||
| ### MongoDB节点配置
 | ||
| 1. **操作类型**: Update Many
 | ||
| 2. **Collection**: articles
 | ||
| 3. **Filter**: `{"title": "={{$json.title}}"}`
 | ||
| 4. **Upsert**: 启用 ✅
 | ||
| 5. **Update**:
 | ||
| ```json
 | ||
| {
 | ||
|   "$setOnInsert": {
 | ||
|     "title": "={{$json.title}}",
 | ||
|     "published_time": "={{$json.published_time}}",
 | ||
|     "source_url": "={{$json.source_url}}",
 | ||
|     "created_at": "={{new Date().toISOString()}}"
 | ||
|   }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ## 推荐方案
 | ||
| 
 | ||
| 使用**方案1**,因为:
 | ||
| - JS函数生成连续的ID
 | ||
| - MongoDB只负责去重插入
 | ||
| - 逻辑清晰,易于调试
 | ||
| 
 | ||
| ## 测试步骤
 | ||
| 
 | ||
| 1. 第一次运行:应该插入所有新文章
 | ||
| 2. 第二次运行:应该0条插入(全部跳过)
 | ||
| 3. 检查数据库:确认没有重复标题 |