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

Как да използвате променливи във функцията за намаляване на картата на MongoDB

Както бе посочено от @Dave Griffith, можете да използвате scope параметър на mapReduce функция.

Малко се потрудих да разбера как правилно да го предам на функцията, защото, както беше посочено от други, документацията не е много подробна. Най-накрая разбрах, че mapReduce очаква 3 параметъра:

  • функция за карта
  • функция за намаляване
  • обект с един или повече от параметрите, дефинирани в документа

В крайна сметка стигнах до следния код в Javascript:

// I define a variable external to my map and to my reduce functions
var KEYS = {STATS: "stats"};

function m() {
    // I use my global variable inside the map function
    emit(KEYS.STATS, 1);
}

function r(key, values) {
    // I use a helper function
    return sumValues(values);
}

// Helper function in the global scope
function sumValues(values) {
    var result = 0;
    values.forEach(function(value) {
        result += value;
    });
    return result;
}

db.something.mapReduce(
    m,
    r,
    {
         out: {inline: 1},
         // I use the scope param to pass in my variables and functions
         scope: {
             KEYS: KEYS,
             sumValues: sumValues // of course, you can pass function objects too
         }
    }
);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намерите подниз в поле в Mongodb

  2. Как да получа масив от колекцията mongoDB?

  3. Архитектура за сигурност:Ръководство за MongoDB

  4. MongoDB - Създаване на документ

  5. Как мога да изброя всички колекции в обвивката на MongoDB?