2016-12-07 17 views
2

MongoDbへのSQL Serverデータベースの移植を評価しています。C#からMongoDbのストアドJavaScriptを呼び出す方法

問題はストアドプロシージャを動かすことで、私はMongoDbがJavaScriptを格納していることを読んだので、.Netでいくつかのテストをしたいと思います。

function (x) 
{ 
    return x; 
} 

これは私がその機能を呼び出すためにしようとするために使用するコードです::

MongoClient oMongoClient = new MongoClient(Properties.Settings.Default.MongoCN); 
IMongoDatabase oMongoDatabase = oMongoClient.GetDatabase("test_db"); 
var result = oMongoDatabase.RunCommand<BsonDocument>("test_function(3)"); 

私はこのエラーを取得する私はtest_functionという名前のMongoDBドライバ2.4.0をインストールし、MongoDBの上でこの機能を作成しました:

An unhandled exception of type 'System.FormatException' occurred in MongoDB.Bson.dll Additional information: JSON reader was expecting a value but found 'test_function'.

答えて

0

私はあなたが保存を実行するには、この方法を使用することができると思いますスクリプト:

var cmd = new JsonCommand<BsonDocument>("{ eval: \"test_function(2)\" }"); 
var result = db.RunCommand(cmd); 

結果はですは、あなたがこの方法を使用することができ、正しい結果を得るために:

var intResult = result["retval"].ToInt32(); 
+0

関数が数値を返すときは正常に動作します。今私は文書のリストを返そうとしたい。私はtest_functionをこれに変更しました:function(x、y) { return db.MyDB.find({_ id:1}); } mongoシェルを実行すると、1つのドキュメントが返されます。ドットネットからは機能しません。 – FDB

+0

@FDB AFAIKこのようにC#でデータベースコマンドの結果を得ることはできません。そのために別の質問をしてください。 –

2

まったく同じ質問はここにあった:MongoDB db.runCommand() from C#

私の最初の答えはそこにありましたが、私はそれがここでやる方が良いと思います。あなたがhereを見ることができるように、本当にストアドプロシージャこの方法を使用することは推奨されていない、

var doc = new BsonDocument(new Dictionary<string, string> { { "test_function", "3" }}); 
var command = new BsonDocumentCommand<int>(doc); 
var result = db.RunCommand(command); 

しかし:

は、私はあなたがこのコードで呼び出すことができると思います。

Iここに別の解決策を発見した:このスニペットで

https://gist.github.com/jamesikanos/b5897b1693b5c3dd1f87

を、あなたがこの方法あなたの関数を呼び出すことができます。

db.EvalAsync("test_function(2)").Result 
+0

おかげで、それはまだ例外がスローされます:型「MongoDB.Driver.MongoCommandException」の未処理の例外がMongoDB.Driver.Core.dll で発生しました追加情報:コマンドtest_functionが失敗しました:そのようなcmdはありません:test_function。 – FDB

+0

も同じ例外があります。申し訳ありませんが、私はそれを行う別の方法を見つけた、答えの更新を参照してください。 –

+0

evalとEvalAsyncが2.4.0ドライバで削除されました。私はクライアントから保存されたjsを呼び出すことは不可能だと思う。また、SQL ServerのStortedプロシージャをMongoに移行する方法もありません。私の評価は終わった、私はそれが不可能であることを認識した。 – FDB

関連する問題