У меня есть около 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 достаточно хорошо, чтобы тестировать его, но я думаю, он примерно на 1024 * медленнее.Есть ли способ параллельно запустить курсор?Мне все равно, если документы в моем collection_2
находятся в другом порядке, чем документы в collection_1
.