MongoDB是否支持将查询集合作为参数传入函数?
MongoDB实现类似MSSQL存储过程的方案
完全可以做到,不管是用Studio 3T这类客户端构建JavaScript函数,还是通过C#驱动调用都没问题,具体说明如下:
用Studio 3T等客户端创建服务器端JS函数
MongoDB支持在服务器端存储JavaScript函数(类似MSSQL的存储过程),你可以直接在Studio 3T里通过命令行完成创建:- 连接目标数据库后,打开命令行窗口,执行以下命令定义函数:
db.system.js.save({ _id: "自定义函数名", value: function(参数1, 参数2) { // 编写业务逻辑,比如查询、更新、聚合操作 return db.目标集合.find({筛选条件}).toArray(); } }) - 创建完成后,直接在命令行调用函数即可:
自定义函数名(传入参数)
注意:新版MongoDB已废弃
db.eval()命令,直接调用函数即可;这类JS函数支持复杂逻辑,比如条件判断、多集合关联操作,灵活性远高于MSSQL的表值函数。- 连接目标数据库后,打开命令行窗口,执行以下命令定义函数:
性能优化建议
如果是处理大规模数据,优先使用MongoDB的聚合管道(Aggregation Pipeline),它的执行性能比服务器端JS函数更优;只有当聚合管道无法实现的复杂业务逻辑,再用JS函数补充处理。C#驱动调用方式
你既可以调用提前在服务器创建好的JS函数,也可以直接通过C#驱动执行临时脚本:var mongoClient = new MongoClient("你的MongoDB连接字符串"); var database = mongoClient.GetDatabase("目标数据库名"); // 调用已创建的服务器端函数 var callCommand = new BsonDocument("eval", "自定义函数名(参数)"); var result = await database.RunCommandAsync<BsonDocument>(callCommand); // 直接执行临时脚本 var tempScript = @" function() { return db.目标集合.find({isActive: true}).toArray(); } "; var tempResult = await database.RunCommandAsync<BsonDocument>(new BsonDocument("eval", tempScript));
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

