Доступ к данным из collectionB на карте / уменьшение выполняется на collectionA - PullRequest
1 голос
/ 14 марта 2011

Как я могу получить доступ к данным из collectionB в пределах части карты "map" / выполнить сокращение на collectionA?

Если это поможет, у меня есть фразы, хранящиеся в collectionA, которые я хочу разбить на каждую фразуотдельные слова на карте, а затем получить конкретные значения для каждого слова из коллекции B.

В коде я представлял, что это будет выглядеть примерно так ...

map = function() {
    var key, value;
    var results = db["collectionB"].find({something_related_to_collectionA});

    results.forEach(function(result) {
        // Change the value
    });

    emit(key, value);
};
reduce = function(key, values) {
    // Perform the reduce
};
db["collectionA"].mapReduce(map, reduce, {out: "collectionC"});

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Итак, теоретически это должно работать. Однако на практике вы не хотите этого делать.

Этот тип поиска открывает целую банку с червями. Например, как это работает с шардингом? Представьте, что ваш javascript включен на shard2 и пытается получить доступ к данным с shard1, как это работает? shard2 даже не знает, что shard1 существует.

Если вы посмотрите на свой код, вы в основном пытаетесь воссоздать оператор JOIN. Одним из условий масштабируемости MongoDB является то, что он избегает объединений, поскольку соединения b / c не масштабируются горизонтально.

Это может означать некоторую дополнительную ненормализацию или некоторую форму предварительной обработки или некоторые другие системные изменения. В идеале, если вам нужно выполнить сокращение карты для коллекции, вы должны спроектировать эту коллекцию так, чтобы она содержала все данные, необходимые для выполнения этой операции.

0 голосов
/ 14 марта 2011

Это должно работать нормально.

db доступен практически из любой точки, насколько я могу судить. Я провел (совершенно бесполезный) тест, и он сработал почти так, как я ожидал. Какие у вас проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...