У меня есть около 25 тыс. документов (4 ГБ в сыром json) данных, которые я хочу выполнить для нескольких javascript-операций, чтобы сделать его более доступным для моего конечного пользователя данных (R
), и я хотел бы "контроль версий" этих изменений, добавив новую коллекцию для каждого изменения, но я не могу понять, как map/reduce
без reduce
. Я хочу создать сопоставление документов один к одному - я начинаю с 25 356 документов в collection_1
, и я хочу получить 25 356 документов в collection_2
.
Я могу взломать это с помощью этого:
var reducer = function(key, value_array) {
return {key: value_array[0]}
}
И затем назовите его так:
db.flat_1.mapReduce(mapper, reducer, {keeptemp: true, out: 'flat_2'})
(Мой картограф только вызывает emit один раз, строка как первый аргумент, а заключительный документ - второй. Это набор тех вторых аргументов, которые я действительно хочу.)
Но это кажется неудобным, и я не знаю, почему он даже работает, поскольку мои аргументы вызова emit
в моем модуле сопоставления не эквивалентны возвращаемому аргументу моего reducer
. Кроме того, я получаю документ вроде
{
"_id": "0xWH4T3V3R",
"value": {
"key": {
"finally": ["here"],
"thisIsWhatIWanted": ["Yes!"]
}
}
}
который кажется лишним.
Кроме того, курсор, который выполняет свои собственные вставки, даже не десятый, как mapReduce
. Я не знаю MongoDB достаточно хорошо, чтобы сравнить его, но я бы догадался о 50x
медленнее. Есть ли способ запустить курсор параллельно? Мне все равно, если документы в моем collection_2
находятся в другом порядке, чем в collection_1
.