Как я могу попросить MongoDB оценить некоторый JavaScript, чтобы получить значение для поля?

Я хочу, чтобы MongoDB динамически присваивала значение одному из полей документа, который я вставляю. Например: текущее время с сервера MongoDB точно так же, как NOW() в MySQL.

Я пробовал это:

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 вместо вставки?


person Sebastián Grignoli    schedule 17.08.2012    source источник


Ответы (1)


См. следующий URL-адрес в документации MongoDB:

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

Существует специальная системная коллекция под названием system.js, в которой могут храниться функции JavaScript для повторного использования.

Однако обратите внимание, что поддержка и производительность кода на стороне сервера (эквивалентного хранимым процедурам) все еще немного плохи (подробности в ссылке).

Изменить:

Чтобы вызвать хранимую процедуру из Go с помощью драйвера mgo, используйте метод Run() типа mgo.Database. (прямая ссылка) и введите команду eval с кодом Javascript. для выполнения на стороне сервера в качестве аргумента. Что-то типа:

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

код не тестировался

Невозможно выполнить оценку кода в инструкции MongoDB insert.

person thwd    schedule 17.08.2012
comment
Как я могу использовать этот подход во вставке, выполняемой в программе Go? - person Sebastián Grignoli; 17.08.2012