Calling a Stored Procedure in MongoDB via C#

我只是一个虾纸丫 提交于 2019-12-12 07:24:39

问题


I have a saved function in system.js called "addNumbers" which has 2 parameters:

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

I wish to execute this function via C#, by adding 2 numbers which are inputted by a user. So far I have the following code:

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);

What I am doing wrong? As no sum is being displayed


回答1:


So I just did a test locally. With

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

I got a saved function myAddFunction. With a little bit modification of your code:

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);

Now I get the right result displayed.




回答2:


If you want to run your stored function and get returned result follow this way:

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


来源:https://stackoverflow.com/questions/23709351/calling-a-stored-procedure-in-mongodb-via-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!