You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Siddhi连接MongoDB Atlas插入数据无报错但失败的问题

问题分析与解决步骤

核心问题定位

从你的代码和描述来看,有几个关键问题导致数据无法插入MongoDB:

  1. 表定义注解错误:你用sink注解定义MongoDB表,但Siddhi中操作数据库表需要用@store注解——@sink仅用于输出流到外部系统,不支持持久化表的CRUD操作。
  2. 查询目标不匹配:你的查询是insert into MongoCollection,但实际定义的表名是siddhiCollection,名称不一致导致数据无法写入正确表。
  3. 缺少数据触发逻辑:Siddhi不会自动生成数据流,必须手动注入测试事件或添加自动生成逻辑,否则InsertStream没有数据流入,自然不会执行插入操作。
  4. SSL配置需验证:虽然你导入了证书,但MongoDB Atlas默认支持SSL,不过仍需确认证书导入是否正确,同时要检查Atlas的IP白名单是否包含你的机器IP(静默拦截连接也会导致无报错但无数据)。

修正后的代码示例

@App:name("ConectionMongoDBAtlas")
@App:description("Connection to MongoDB Atlas")

@store(type='mongodb',
uri='mongodb+srv://username:password@cluster0.cs3wyqb.mongodb.net/siddhi?retryWrites=true&w=majority',
collection.name='siddhiCollection',
database.name='siddhi'
)
@primaryKey("name")
@index('age')
define table siddhiCollection(name string, age int);

@sink(type='log')
define stream BarStream(message string);

@info(name='query1')
define stream InsertStream(name string, age int);

-- 修正插入目标为正确的表名
from InsertStream
insert into siddhiCollection;

-- 可选:添加自动测试数据生成触发器,每5秒插入一条测试数据
@info(name='test-data-generator')
define trigger TestTrigger at every 5 seconds;

from TestTrigger
select "Alice" as name, 30 as age
insert into InsertStream;

关键修正说明

  • 替换@sink为@store:@store注解专门用于绑定Siddhi表与外部数据库,支持数据持久化;@sink仅做流输出,不适合数据库表操作。
  • 统一表名:确保查询中插入的目标表和定义的表名完全一致(siddhiCollection)。
  • 添加数据触发:示例中用触发器自动生成测试数据,也可以在Siddhi编辑器的「Event Simulator」中手动向InsertStream发送事件。

SSL与连接验证步骤(若问题仍存在)

  1. 检查MongoDB Atlas的IP白名单,确保当前机器的IP已被添加,否则连接会被静默拦截。
  2. 验证证书导入正确性,用keytool命令查看证书库:
    keytool -list -keystore C:/Users/luis.ortega/Downloads/siddhi-tooling-5.1.0/resources/security/client-truststore.jks -storepass mongodb
    
  3. 若需强制SSL,在@store注解中添加以下参数:
    secure.connection='true',
    trust.store='C:/Users/luis.ortega/Downloads/siddhi-tooling-5.1.0/resources/security/client-truststore.jks',
    trust.store.password='mongodb'
    

验证流程

  1. 运行修正后的代码,查看控制台是否有测试数据生成的日志。
  2. 登录MongoDB Atlas控制台,检查siddhi数据库下的siddhiCollection集合是否有数据插入。
  3. 若仍无数据,查看Siddhi Tooling的详细日志(logs目录下),排查是否有隐藏的连接或权限错误。

内容的提问来源于stack exchange,提问作者Ricardo Ortega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:25:26