2012-06-05 130 views
0

我正在嘗試使用Node.js來編寫MongoDB map/reduce作業。我有調用map reduce的node.js代碼正常工作,但我需要在mapper方法中執行Node.js調用。它看起來像是將映射器(和reducer)解釋爲Javascript,而不是Node.js.是否可以在mongoDB map reduce的map函數中使用node.js?

有沒有一種方法來執行映射器和Reducer作爲Node.js函數?有一些技巧或解決方法,我可以通過Javascript調用Node.js嗎?

我的代碼:

var mongo = require('mongodb'), 
    Server = mongo.Server, 
    Db = mongo.Db; 

var fbFeed = require('./getFeeds'); 

var server = new Server('localhost', 27017, {auto_reconnect: true}); 
var db = new Db('test', server); 

var map = function() { 
    fbFeed.getFbFeed(this.dbId, function(record) { 
     emit(record.fbId, record); 
    }); 
} 

var reduce = function (key, values) { 
    return values; 
} 

db.open(function (err, db) { 
    if (!err) { 
     db.collection('facebookToScan', function (err, collection) { 
      if (!err) { 
       collection.mapReduce(map, reduce, {'out': "fbClicks"}, function(err, collection) { 
       }); 
      } 
     }); 
    } 
}); 

(其中」 ./getFeeds'包含getFbFeed

而且我的錯誤是:

mr failed, removing collection :: caused by :: 9014 map invoke failed: JS Error: ReferenceError: fbFeed is not defined nofile_b:1 

回答

1

我不知道這是可能的。 MongoDB中的M/R在其自己的JavaScript環境中運行,將鏈接到node.js運行的JavaScript環境。