2015-06-17 3 views
0

Мне нужно написать кучу запросов.Как я могу загрузить другие js-скрипты и запускать его с помощью mongodb

И каждый запрос разделяют некоторые common data structure или function

Как я мог загрузить common.js и использовать function и constants в app.js (actullay я написал его в кофе, а затем преобразовать его в js)

I получил ошибку mongo localhost:27017/test app.js

E QUERY ReferenceError: leading_zero is not defined

common.js
USERS = [ 
    '477 ', 
    '4770 ' 
] 

    leading_zero = function(num, size) { 
    var s; 
    if (size == null) { 
     size = 2; 
    } 
    s = num + ''; 
    while (s.length < size) { 
     s = '0' + s; 
    } 
    return s; 
    }; 

app.js
load("./common.js") 
print(leading_zero(3)) 
print(USERS) 
+0

Как выглядит фактический JavaScript? Является ли переведенная версия 'common.js' включена в ваш' lib-get-allergic-collections.js'? Сначала я попробую загрузить ваш код JavaScript в оболочку 'mongo' для работы с любыми синтаксическими ошибками или включить в свой вопрос фактический код функции' leading_zero() '. Исходная ошибка предполагает, что вы не загрузили файл JavaScript, определяющий функцию 'leading_zero()'. – Stennie

+0

Как включить 'common.js'? У вас есть синтаксические ошибки в массиве пользователей (они должны быть разделены запятыми), но определение функции в противном случае выглядит ОК. Возможно, вам не хватает строки типа 'load (" ./ lib/common.js ")' в начале вашего 'app.js'? – Stennie

ответ

2

функция leading_zero должно быть на вашем дб. См. http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/.

Первый запуск этого на скорлупе:

db.system.js.save(
    { 
    _id: "leading_zero", 
    value : function(num, size) { 
     var s; 
     if (size == null) { 
      size = 2; 
     } 
     s = num + ''; 
     while (s.length < size) { 
      s = '0' + s; 
     } 
     return s; 
     } 
    } 
) 

Это позволит сохранить функцию БД в качестве системной функции.

Запустить db.loadServerScripts(); на оболочке один раз, чтобы загрузить все скрипты.

Тогда вы можете позвонить ему в любом месте запроса.

print(leading_zero(3)) // directly on shell 

db.myCollection.find({ $where: "this.credits == myfunc(this.xValue)" }); // on query 
Смежные вопросы