1

我正在尝试通过 Mongoose 使用 Mongodb 的 mapReduce 函数,但我传入的 map 函数从未被调用。以下是“Post”模型集合中当前包含的数据:

[ { data: 'Tag test data',
name: 'Tag Test',
_id: 5130dff2560105c235000002,
__v: 0,
comments: [],
tags: [ 'tag1', 'tag2', 'tag3' ] },


 { data: 'Testing tags.  Again.',
    name: 'Another test post',
    _id: 5131213b611fe1f443000002,
    __v: 0,
    comments: [],
    tags: [ 'tags', 'test', 'again' ] } ]

这是代码:

var Schema = mongoose.Schema;
var PostSchema = new Schema ({
   name : String
   , data : String
   , tags : [String]
});
mongoose.model('Post', PostSchema);


var o = {};

o.map = function() {
    if (!this.tags) {
        //console.log('No tags found for Post ' + this.name);
        return;
    }
    for (index in this.tags) {
        emit(this.tags[index], 1);
    }
}

o.reduce = function(previous, current) {
    var count = 0;
    for (index in current) {
        count += current[index];
    }
    return count;
}

o.out = { replace : 'tags'}
o.verbose = true;

var Post = mongoose.model('Post');

Post.mapReduce(o, function(error, model, stats) {
    console.log('model: ' + model);
    console.log('stats: ' + stats);
});

"model" 和 "stats" 对象总是未定义的,并且 map 函数中的日志语句永远不会被调用。如果我在 mapReduce 函数之外使用 Post 模型执行类似操作,我会按预期在帖子顶部获取数据:

Post.find().exec(function(err, posts) {
    console.log(posts);
});

有什么建议么?我敢肯定有些事情只是稍微有点不对...

4

2 回答 2

5

您不能console.logmapandreduce函数中调用,因为 Mongo 的 JavaScript 引擎不支持它。

于 2013-03-03T14:10:50.447 回答
1

要调试你的 map/reduce/finalize 函数,你可以使用 MongoDB print语句。输出将添加到您的 Mongo 日志文件中。

于 2015-01-08T17:02:31.440 回答