在mongoDB中,map函数发出完整文档而不将(key,values)对分配给varchar

时间:2014-06-23 09:57:23

标签: mongodb mapreduce

var map = function() {
    var values = {d_sno : this.d_sno, type : this.type};
    emit(this._id, values);
};

在上面的map函数中,我将(key,value)对分配给varchar并发出该varchar。我想发出整个文档而不将(key,value)对分配给varchar。

1 个答案:

答案 0 :(得分:3)

您可以像这样发出整个文档:

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 MB)。