sql >> Database >  >> NoSQL >> MongoDB

Hoe functie-y te schrijven die parameter-fct_x accepteert die toegang heeft tot var-a die moet worden gedefinieerd in functie-y?

Als ik je vraag goed heb begrepen, ben je op zoek naar dynamische scoping . Javascript heeft een lexicaal bereik, dus om een ​​variabele vast te leggen, moet de afsluiting tekstueel binnen het bereik vallen. Anders is dit niet mogelijk, afgezien van meer of minder domme trucs zoals bijvoorbeeld:

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

Zie ook Is het mogelijk om dynamische scoping in JavaScript te bereiken zonder toevlucht te nemen tot eval? voor meer discussie en voorbeelden.

Wat specifiek uw MongoDB-vraag betreft, het is niet mogelijk om in pure javascript een variabele in het bereik van een functie te injecteren (nogmaals, zonder toevlucht te nemen tot eval). Maar Mongo's map-reduce is geschreven in C++, niet in JS, en kan het bereik op willekeurige manieren manipuleren:

_scope->setFunction("emit", etc

Zie de bron .

Voor de volledigheid is hier een voorbeeld met 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. MongoDB-aggregatie - projectveldwaarden als velden

  2. mongodb aggregatie kadergroep + project

  3. Hoe naamruimtesleutels op redis te gebruiken om naambotsingen te voorkomen?

  4. MongoDB is niet correct geïnstalleerd op Ubuntu 11.04 in Amazon EC2