首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB。Map-Reduce finalize函数

MongoDB。Map-Reduce finalize函数
EN

Stack Overflow用户
提问于 2012-05-12 19:59:30
回答 2查看 3.4K关注 0票数 3

我想通过日期累计来计算用户。我有以下map reduce函数:

代码语言:javascript
复制
var m = function(){
    // creation date
    var d = new Date(parseInt(this._id.toString().slice(0,8), 16)*1000);
    // ticks
    var t = d.getTime();
    emit(d2,d3);
};

var r = function(k,v){
    return v[0];    // just go next with ticks
};

var opts = { out :  { merge : "UserAccum", db : "Metric"},
    finalize: function(k,v){
    var str = "parseInt(this._id.toString().slice(0,8), 16)*1000 <= "+v;
    return db.User.count({$where:str});         
} 
};
var res = db.Provider.mapReduce(m, r, opts);

运行时,我得到错误:

代码语言:javascript
复制
Sat May 12 17:47:23 uncaught exception: map reduce failed:{
    "assertion" : "invoke failed: JS Error: TypeError: db has no properties
nofile_b:2",
    "assertionCode" : 9004,
    "errmsg" : "db assertion failure",
    "ok" : 0
}

看起来不可能调用db。finalize内部的方法。为什么?

我知道我可以从map()和reduce()调用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-12 20:01:22

是的,您不能在map-reduce函数中运行查询。它们必须仅依赖于它们的输入参数。

票数 4
EN

Stack Overflow用户

发布于 2013-08-02 21:44:56

您可以在mapreduce函数中运行查询,只是db是对默认数据库的引用,而不是自动引用您正在运行的数据库。

所以您需要这样做: var fdb = db.getSiblingDB('yourdb');var results = fdb.yourcollection.find(..);

我不知道这是不是新的,在一年前的版本中不起作用。在这种情况下,"can“也可能不同于”should“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10563510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档