sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan skriver man funktion-y, der accepterer parameter-fct_x, som tilgår var-a, som skal defineres i funktion-y?

Hvis jeg har forstået dit spørgsmål rigtigt, leder du efter dynamisk scoping . Javascript er leksikalsk scoped, så for at fange en variabel, skal lukningen være tekstmæssigt inden for dens scope. Ellers er dette ikke muligt, uden at tælle mere eller mindre fjollede tricks som f.eks.:

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

Se også Er det muligt at opnå dynamisk scoping i JavaScript uden at ty til eval? for flere diskussioner og eksempler.

Med hensyn til dit MongoDB-spørgsmål specifikt, er det ikke muligt i rent javascript at injicere en variabel i en eller anden funktions omfang (igen, uden at ty til eval). Men Mongos map-reduce er skrevet i C++, ikke i JS, og kan manipulere omfanget på vilkårlige måder:

_scope->setFunction("emit", etc

Se

For fuldstændighedens skyld er her et eksempel med 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. Hvordan tilføjer man automatisk stigningsfelt i MongoDB-aggregat?

  2. MongoDB $min Aggregation Pipeline Operator

  3. Apache Phoenix til CDH

  4. replika Sæt mongo docker-compose