2

挿入するドキュメントのフィールドの 1 つに、MongoDB が動的に値を割り当てられるようにしたいと考えています。例: MySQL で NOW() が行うのと同じように、MongoDB サーバーからの現在の時刻。

私はこれを試しました:

c := mongoSession.DB("myapp").C("instances")
rand.Seed(time.Now().UnixNano())
err := c.Insert(
   struct{Serial, Priority, Url, LastSeen interface{}}{ 
      Url: getInformedHost() + ":" + getRunningPortString(), 
      Priority: rand.Int(), 
      LastSeen: mongoNow() }
)
checkError(err, "Could not register on MongoDB server.", 3)

私はこのヘルパー関数を持っています:

func mongoNow() bson.JavaScript {
    return bson.JavaScript{Code: 
         "(new Date()).ISODate('YYYY-MM-DD hh:mm:ss')"}
}

LastSeen フィールドは、評価される代わりにスクリプトとして保存されます。

[_id] => MongoId Object (
    [$id] => 502d6f984eaead30a134fa10
)
[priority] => 1694546828
[url] => 127.0.0.1:8080
[lastseen] => MongoCode Object (
    [code] => (new Date()).ISODate('YYYY-MM-DD hh:mm:ss')
    [scope] => Array (
    )
)

javascript を挿入する代わりに評価するにはどうすればよいですか?

4

1 に答える 1

6

MongoDB ドキュメントの次の URL を参照してください。

http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Storingfunctionsserverside

system.js再利用する JavaScript 関数を格納できる、と呼ばれる特別なシステム コレクションがあります。

ただし、サーバー側のコード (ストアド プロシージャと同等) のサポートとパフォーマンスはまだ少し不十分であることに注意してください (詳細はリンクを参照)。

編集:

mgo ドライバーを使用して Go からストアド プロシージャを呼び出すには、mgo.Database型のRun()メソッド ( direct linkeval ) を使用し、サーバー側で実行される Javascript コードを引数としてコマンドを発行します。何かのようなもの:

db.Run(bson.M{"eval": "myStoredFunction();"})

コード未テスト

insertMongoDBステートメントでコードを評価することはできません。

于 2012-08-17T16:30:56.987 に答える