Javascript Mapreduce查询在nodejs服务器中的应用
我有两个收藏,比如association和associationrates。下面是我的收藏结构, 1.协会Javascript Mapreduce查询在nodejs服务器中的应用,javascript,jquery,node.js,mongodb,Javascript,Jquery,Node.js,Mongodb,我有两个收藏,比如association和associationrates。下面是我的收藏结构, 1.协会 { "name" : "MJDMA", "uniqecode" : "Mjdma", "address" : "Chennai", "phoneno" : "0448676788", "mobileno" : "98786766567", "emailid" : "mjdma@mail.com", "website" : "www.mjdma.org", "status" : "on",
{ "name" : "MJDMA", "uniqecode" : "Mjdma", "address" : "Chennai", "phoneno" : "0448676788", "mobileno" : "98786766567", "emailid" : "mjdma@mail.com", "website" : "www.mjdma.org", "status" : "on", "created" : "January 19th 2014, 11:23:44 am", "_id" : { "$oid" : "52dbb5c0279f660000000001" } }
{ "name" : "Coimbatore Jewellery association", "uniqecode" : "CJAB", "address" : "Coimbatore", "phoneno" : "9787457363", "mobileno" : "9787457363", "emailid" : "rvkvino@gmail.com", "website" : "www.cja.org", "status" : "off", "created" : "January 19th 2014, 11:24:36 am", "_id" : { "$oid" : "52dbb5f4279f660000000002" }, "modifiedAt" : "January 20th 2014, 7:40:36 am" }
2.关联率
{ "associationid" : "52dbb5c0279f660000000001", "gold22ct1grm" : "2803", "gold24ct10grm" : "29980", "silver1grm" : "48.30", "silver1kg" : "45150", "created" : "January 20th 2014, 11:27:39 am", "_id" : { "$oid" : "52dd082be7b9660000000001" } }
{ "associationid" : "52dbb5f4279f660000000002", "gold22ct1grm" : "3400", "gold24ct10grm" : "39789", "silver1grm" : "63", "silver1kg" : "61000", "created" : "January 20th 2014, 1:35:59 pm", "_id" : { "$oid" : "52dd263f1e82e20000000001" } }
我正在将关联id存储到associationrate集合中以供参考。我必须在jqgrid中显示associationrate详细信息,格式为Association Name、Rate1、Rate2、Rate3、Rate4、更新的日期和时间以及associationrateid
var moment = require('moment');
var associationrates = dbcon.collection('associationrates'); //dbcon is global variable of db object.
var association = dbcon.collection('associations');
exports.getAllassociationrates = function(req,callback)
{
var map = function () {
var output= {assoname:association.findOne({_id:this.associationid}).name,gold22ct1grm:this.gold22ct1grm, gold24ct10grm:this.gold24ct10grm,silver1grm:this.silver1grm,silver1kg:this.silver1kg,_id:this._id}
emit(this._id, output);
};
var reduce = function(key, values) {
var outs={ assoname:null , gold22ct1grm:null , gold24ct10grm:null , silver1grm:null , silver1grm:null , _id:null}
values.forEach(function(v){
if(outs.assoname ==null){
outs.assoname = v.assoname
}
if(outs.gold22ct1grm ==null){
outs.gold22ct1grm = v.gold22ct1grm
}
if(outs.gold24ct10grm ==null){
outs.gold24ct10grm = v.gold24ct10grm
}
if(outs.silver1grm ==null){
outs.silver1grm = v.silver1grm
}
if(outs.silver1kg ==null){
outs.silver1kg = v.silver1kg
}
if(outs._id ==null){
outs._id = v._id
}
});
return outs;
};
associationrates.mapReduce(map,reduce,{out: 'emp_dept'}, function(err, collection, stats) {
if(err) {
console.log(err);
callback(err,null);
}else{
console.log("Collection:");console.log(collection);
console.log(stats);
callback(null,stats);
}
});
}
但是得到的错误就像
{ [MongoError: exception: map invoke failed: JS Error: ReferenceError: association is not defined nofile_b:2]
请帮助任何人,了解如何解决此问题,或者是否有任何其他解决方案可以实现我的预期输出。在MongoDB服务器上执行
mapReduce
命令。您先前定义的关联
变量存在于NodeJS应用程序的范围内,不能在Map/Reduce上下文中使用。MongoDB(在2.4中)故意不支持任何上下文(包括Map/Reduce)中的服务器端连接,因此您需要制定一种不同的方法。实现两个MongoDB集合的预期输出的解决方案是运行多个查询并将数据加入应用程序代码中。好的,谢谢,我会按照您的建议做