Где я могу найти реализацию функции emit (), используемую в карте MongoDB/уменьшить?

Я пытаюсь развить более глубокое понимание карты/сокращения в MongoDB.

Я считаю, что лучший способ добиться этого - посмотреть на фактическую реализацию emit. Где я могу найти его?

Еще лучше будет просто реализовать emit() . В документации MongoDB они показывают способ устранения неполадок emit() , написав свой собственный, но основная реализация, которую они дают, действительно слишком элементарная.

Я хотел бы понять, как происходит группировка.

2
nl ja de

2 ответы

Я думаю, что определение, которое вы ищете, находится здесь:

https://github.com/mongodb /mongo/blob/master/src/mongo/db/commands/mr.cpp#L886

Нужно достаточно много контекста, чтобы полностью понять, что происходит. Признаюсь, я этого не делаю.

2
добавлено
github.com/mongodb/mongo/ blob/master/src/third_party/js-1.7/& zwnj; & hellip; Я думаю, что это версия, используемая во время работы базы данных js
добавлено автор JB., источник
да, нужно немного контекста :) любая идея, где найти js-версию?
добавлено автор O.Powell, источник
добавлено автор O.Powell, источник

1. Требуемая версия JSMongo больше не находится в адресе O.Powell, который мертв. Я не могу это найти.

2.The below code seems to be the snippet of most interest. This cpp function, switchMode, computes the emit function to use. It is currently at; https://github.com/mongodb/mongo/blob/master/src/mongo/db/commands/mr.cpp#L815

3. Я пытался проверить, имеет ли emit по умолчанию ключ _id, который, по-видимому, встречается через _mrMap, не показанный здесь. В другом месте оно инициализируется {}, пустым отображением.

void State::switchMode(bool jsMode) {
    _jsMode = jsMode;
    if (jsMode) {
       //emit function that stays in JS
        _scope->setFunction("emit",
                            "function(key, value) {"
                            " if (typeof(key) === 'object') {"
                            " _bailFromJS(key, value);"
                            " return;"
                            " }"
                            " ++_emitCt;"
                            " var map = _mrMap;"
                            " var list = map[key];"
                            " if (!list) {"
                            " ++_keyCt;"
                            " list = [];"
                            " map[key] = list;"
                            " }"
                            " else"
                            " ++_dupCt;"
                            " list.push(value);"
                            "}");
        _scope->injectNative("_bailFromJS", _bailFromJS, this);
    }
    else {
       //emit now populates C++ map
        _scope->injectNative( "emit" , fast_emit, this );
    }
}
0
добавлено
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MongoDB Russian
MongoDB Russian
1 086 участник(ов)

> db.stats() https://combot.org/chat/-1001035023078