2011-10-10 19 views

回答

4

您必须使用不推荐使用的方法DBCollection.group(DBObject args),并将键函数javascript代码添加为名为“$ keyf”的DBObject键下的字符串。

BasicDBObject args = new BasicDBObject(); 
args.put("ns", nameSpace); 
args.put("initial" , initialDBObject); 
args.put("cond" , queryDBObject); 
args.put("$reduce" , reduceJavasriptCodeString); 
args.put("$keyf", keyfJavascriptCodeString); 
if(finalize != null) args.put("finalize", finalizeJavascriptCodeString); 
DBObject groupResult = mydbCollection.group(args); 
+2

工作得很好,如果存在一个非弃用变种还在纳闷。 – ngeek

1

这段代码应该做的工作适合你:

public static CommandResult exeMapReduceAlikeGroupCmd(DB db, String colName, String keyFunc, DBObject query, 
                 String reduceFunc, DBObject initial) { 
    BasicDBObject cmd = new BasicDBObject("ns", colName);// this is the collection name 
    cmd.append("$keyf", keyFunc);// keyf function 
    cmd.append("cond", query); // cond query object 
    cmd.append("$reduce", reduceFunc);// reduce function 
    cmd.append("initial", initial);// initial value 
    cmd = new BasicDBObject("group", cmd); 
    return db.command(cmd, db.getOptions()); 
} 
相关问题