#mongodb #mapreduce
#mongodb #mapreduce
Вопрос:
var map = function() {
var values = {d_sno : this.d_sno, type : this.type};
emit(this._id, values);
};
В приведенной выше функции отображения я присваиваю (key,value)
пару переменной и создаю эту переменную. Я хочу выдать весь документ без присвоения (key,value)
пары переменной.
Комментарии:
1. Обычно вы бы этого не хотели, поскольку это противоречит цели функции «уменьшить» для уникальных ключей. Вы всегда можете просто удалить
_id
ключ после копирования ссылки и просто вернутьthis
часть. Позволяет избежать ненужного дублирования.
Ответ №1:
Вы можете выдать весь документ следующим образом:
var map = function() {
emit(this._id, this);
};
Отправляя весь документ в качестве значения, отправленный документ будет выглядеть следующим образом:
{
"_id" : ObjectId("53a6bd394aaee8df24b45dc5"),
"value" : {
"_id" : ObjectId("53a6bd394aaee8df24b45dc5"),
"d_sno" : "foo",
"type" : "bar",
/* ... other fields */
}
}
Проблема с этим подходом заключается в том, что у вас будет _id документов в значении и в ключе (потому что вы используете _id в качестве ключа).
Чтобы избавиться от _id в передаваемом значении, вы можете использовать этот подход:
var map = function() {
var key = this._id;
var value = this;
delete value._id;
emit(key, value);
};
Но вы должны быть осторожны при выдаче целых документов, потому что один эмиссионный файл может содержать только половину максимального размера документа MongoDB в формате BSON (который в настоящее время составляет 16 МБ).