В MongoDB функция отображения выдает полный документ без присвоения пары (ключ, значения) переменной

#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 МБ).