MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak napisać funkcję-y akceptującą parametr-fct_x, która uzyskuje dostęp do zmiennej-a, która musi być zdefiniowana w funkcji-y?

Jeśli dobrze zrozumiałem Twoje pytanie, szukasz dynamicznego określania zakresu . JavaScript jest objęty zakresem leksykalnym, więc aby przechwycić zmienną, zamknięcie musi znajdować się w jego zakresie tekstowym. W przeciwnym razie nie jest to możliwe, nie licząc mniej lub bardziej głupich sztuczek, takich jak na przykład:

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

Zobacz także Czy możliwe jest osiągnięcie dynamicznego określania zakresu w JavaScript bez uciekania się do eval? więcej dyskusji i przykładów.

Jeśli chodzi konkretnie o pytanie MongoDB, w czystym javascript nie jest możliwe wstrzyknięcie zmiennej do zakresu jakiejś funkcji (znowu, bez uciekania się do eval). Ale map-reduce Mongo jest napisany w C++, a nie w JS, i może manipulować zasięgiem w dowolny sposób:

_scope->setFunction("emit", etc

Zobacz źródło .

Dla kompletności, oto przykład z 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. ranking rankingowy w mongo z otaczającymi graczami

  2. Mongo podaje błąd klucza dupleksowego dla pól z unikalnym:false

  3. Jak mogę upsertować wiele obiektów za pomocą MongoDB i Node.js?

  4. Jak zaktualizować określony klucz w poddokumencie MongoDB za pomocą Sails.js i Waterline?

  5. mongoDB:znajdź według osadzonej wartości