web-dev-qa-db-ja.com

mongodbのストアド関数を呼び出す

Mongdb内のストアド関数を呼び出すのにいくつかの問題が発生しています。私はmongoの初心者です。

[編集]:mongodbに保存されている私の関数

function() {
    var cndTime = new Date().getTime() - (3600*1000*24*2); // condition
     db.urls.find(needParse: false).forEach(function(item){
        if(item.date < cndTime)  // check
            db.urls.update({_id: item._id}, {$set: { needParse: true }}); // update field
     });
}

私が求めているのは、reactivemongoまたはネイティブAPIを使用してこの関数を呼び出す方法だけです。

5
Ben Rhouma Zied

最初にechoFunctionという名前の関数を_system.js_コレクションに保存し、db.eval()を使用して関数を呼び出すmongoシェルの次の例について考えてみます。

_db.system.js.save({
    _id: "echoFunction",
    value: function (x) {
        return 'echo: ' + x;
    }
})

db.eval("echoFunction('test')") // -> "echo: test"
_

echoFunction(...)eval/_$where_/mapReduceなどで利用できます。詳細については http://docs.mongodb.org/)を参照してください。 manual/tutorial/store-javascript-function-on-server

16
Nanhe Kumar

Mongoシェルでは、db.loadServerScripts()を使用して、現在のデータベースのsystem.jsコレクションに保存されているすべてのスクリプトをロードできます。ロードされると、次の例のように、シェルで直接関数を呼び出すことができます

db.loadServerScripts();

mySampleFunction(3, 5);
10
byteC0de

名前の付いた特別なシステムコレクションがあります

system.js

再利用のためにJavaScript関数を保存できます。

関数を保存するには、

db.collection.save()

、次の例のように:

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

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

_ idフィールドは関数の名前を保持し、データベースごとに一意です。

valueフィールドは関数定義を保持します。

mongoシェルでは、次を使用できます

db.loadServerScripts()

現在のデータベースのsystem.jsコレクションに保存されているすべてのスクリプトをロードします。ロードされると、次の例のように、シェルで直接関数を呼び出すことができます。

db.loadServerScripts();

echoFunction(3);

myAddFunction(3, 5);

出典: MONGODB MANUAL

7
KhogaEslam

このように関数を呼び出すことができます

db.loadServerScripts();
db.data.insert({
   _id: myFunction(5),
    name: "TestStudent"
});

コマンドを使用して関数がdbに保存されている場合:

db.system.js.save(
 {
  _id : "myFunction" ,
  value : function (x){ return x + 1; }
  });
2
Kiwi Rupela

それが機能するためには$ whereを使用する必要があると思います!このようなもの:

db.urls.find( { needParse: false, $where: function(item){
        if(item.date < cndTime)  // check
            db.urls.update({_id: item._id}, {$set: { needParse: true }});

詳細については、これをお読みください: https://docs.mongodb.com/manual/reference/operator/query/where/

0
saeedeh