sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur skriver man funktion-y som accepterar parameter-fct_x som accessar var-a som måste definieras i funktion-y?

Om jag förstod din fråga rätt, letar du efter dynamisk omfattning . Javascript har en lexikalisk omfattning, så för att fånga en variabel måste stängningen vara textmässigt inom dess omfång. Annars är detta inte möjligt, utan att räkna med mer eller mindre fåniga knep som till exempel:

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 även Är det möjligt att uppnå dynamisk omfattning i JavaScript utan att använda eval? för mer diskussion och exempel.

När det gäller din MongoDB-fråga specifikt, är det inte möjligt i rent javascript att injicera en variabel i någon funktions räckvidd (igen, utan att tillgripa eval). Men Mongos map-reduce är skriven i C++, inte i JS, och kan manipulera omfattningen på godtyckliga sätt:

_scope->setFunction("emit", etc

Se

För fullständighetens skull, här är ett exempel 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. Kan inte ansluta till docker mongo

  2. Vår :Kan en klass vara både @Document och @Table

  3. Hur man filtrerar data mellan två gånger från hh:mm till hh:mm i mongoDB

  4. Hur avbryter jag en fråga i mongo JavaScript-skal