在Dify中连接MongoDB需启用自定义代码开关,自托管版安装pymongo,云版改用HTTP对接;通过环境变量配置URI(含URL编码凭据),用insert_one或update_one写入用户画像,find_one安全读取并过滤_id字段。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify中连接MongoDB数据库,需绕过其默认的SQL数据库限制,通过自定义Python代码块调用PyMongo驱动完成非结构化用户画像数据的读写操作。
准备MongoDB连接环境
进入Dify工作区 → 点击左侧「应用」→ 选择目标应用 → 右上角「设置」→ 「高级设置」→ 开启「启用自定义代码」开关。该开关是运行PyMongo的前提,【未开启则后续所有代码将被拦截且无报错提示】。
确认当前Dify部署支持外部Python包安装:若为云托管版(如Dify Cloud),仅支持预装库,需改用HTTP方式对接MongoDB Atlas;若为自托管版,则SSH登录服务器执行 pip install pymongo==4.6.3。
配置MongoDB连接参数
在应用内新建一个「代码」组件,语言选 Python。
在代码块顶部添加环境变量声明:
import os
from pymongo import MongoClient
MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017/")
DB_NAME = os.getenv("MONGO_DB_NAME", "user_profile")
COLLECTION_NAME = os.getenv("MONGO_COLLECTION_NAME", "profiles")
注意:MONGO_URI 必须包含用户名密码并进行URL编码,例如 admin:p@ss%23word → 否则连接会静默失败。
实现用户画像写入逻辑
方法一:单条插入(推荐用于注册/更新场景)
client = MongoClient(MONGO_URI)
db = client[DB_NAME]
collection = db[COLLECTION_NAME]
user_data = {
"user_id": "usr_abc123",
"traits": {"age": 28, "interests": ["AI", "travel"], "last_active": "2024-05-22"},
"created_at": {"$date": "2024-05-22T10:30:00Z"}
}
result = collection.insert_one(user_data)
方法二:按 user_id 上限覆盖写入(避免重复)
collection.update_one(
{"user_id": user_data["user_id"]},
{"$set": user_data},
upsert=True
)
实现用户画像读取逻辑
第一步:构造查询条件字典
query = {"user_id": "usr_abc123"}
第二步:建立连接并获取文档
client = MongoClient(MONGO_URI)
db = client[DB_NAME]
collection = db[COLLECTION_NAME]
doc = collection.find_one(query)
第三步:安全返回字段(防止None报错)
if doc:
# 删除MongoDB内置字段,只保留业务数据
doc.pop("_id", None)
return doc
else:
return {"error": "user not found"}


















