通过C#调用MongoDB中的存储过程

时间:2014-05-17 08:45:57

标签: c# mongodb mongodb-.net-driver

我在system.js中有一个名为“addNumbers”的已保存函数,它有两个参数:

function addNumbers( a , b ) {
    return a + b;
}

我希望通过添加由用户输入的2个数字通过C#执行此功能。到目前为止,我有以下代码:

MongoClient client = new MongoClient();
MongoServer server = client.GetServer();
MongoDatabase test = server.GetDatabase("test");

Console.WriteLine("Input two numbers: ");
string num1 = Console.ReadLine();
string num2 = Console.ReadLine();
BsonValue bv = test.Eval("addNumbers", num1, num2);
BsonValue bv1 = test.Eval(bv.AsBsonJavaScript.Code, num1, num2);

我做错了什么?因为没有显示总和

2 个答案:

答案 0 :(得分:2)

所以我只是在当地做了一个测试。与

db.system.js.save({
    _id : "myAddFunction" ,
    value : function (x, y){ return x + y; }
});

我有一个保存的函数myAddFunction。稍微修改一下代码:

MongoClient client = new MongoClient("mongodb://192.168.122.1/test");
MongoServer server = client.GetServer();
MongoDatabase test = server.GetDatabase("test");

Console.WriteLine("Input two numbers: ");
string num1Str = Console.ReadLine();
string num2Str = Console.ReadLine();
int num1 = int.Parse(num1Str);
int num2 = int.Parse(num2Str);

BsonValue bv = test.Eval("myAddFunction");
BsonValue bv1 = test.Eval(bv.AsBsonJavaScript.Code, num1, num2);
Console.WriteLine(bv1);

现在我显示了正确的结果。

答案 1 :(得分:0)

如果您想运行存储的函数并返回结果,请按照以下方式操作:

var num1 = Console.ReadLine();
var num2 = Console.ReadLine();
var command = new JsonCommand<BsonDocument>($"{{ eval: \"addNumbers({num1},{num2})\" }}");
var result = db.RunCommand(command)["retval"].ToInt32();