MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да напиша функция-y, приемаща параметър-fct_x, който има достъп до var-a, който трябва да бъде дефиниран във функция-y?

Ако съм разбрал въпроса ви правилно, вие търсите динамичен обхват . Javascript е с лексикален обхват, така че за да улови променлива, затварянето трябва да бъде текстово в нейния обхват. В противен случай това не е възможно, без да броим повече или по-малко глупави трикове като например:

function makeClosure(context) {
    return function() {
        return context("a") + 1;
    };
}

function y(evalThis) {
    var a = 2;

    if(evalThis)
        return eval(evalThis);

    return makeClosure(y);
}

closure = y();
document.write(closure()) // 3

Вижте също Възможно ли е да се постигне динамичен обхват в JavaScript, без да се прибягва до eval? за повече дискусии и примери.

Що се отнася конкретно до вашия MongoDB въпрос, не е възможно в чист javascript да се инжектира променлива в обхвата на някаква функция (отново, без да се прибягва до eval). Но map-reduce на Mongo е написан на C++, а не на JS, и може да манипулира обхвата по произволни начини:

_scope->setFunction("emit", etc

Вижте източника .

За пълнота, ето пример с eval :

function map(ary, fun) {

    // define some locals
    var LOCAL = 42;

    // re-evaluate the function within the scope
    eval("fun=" + fun);

    // now fun sees our locals
    return ary.map(fun);
}

document.write(
    map([1,2,3], function(x) { return x * LOCAL }) // [ 42, 84, 126 ]
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $push срещу $addToSet:Каква е разликата?

  2. Намирате пропуски в огромни потоци от събития?

  3. mongoose поддържа ли виртуални полета в select като SQL

  4. MongoDB findOne()

  5. Можете ли да имате разрешения за ниво на събиране в MongoDB?