MongoDB 中的 db.eval() 错误
Error in db.eval() in MongoDB
我正在尝试 运行 使用 db.eval()
方法的 map-reduce 脚本。
MongoClient mongo = new MongoClient("localhost", 27017);
DB mongodb = (DB) mongo.getDB("testDB");
String script = "db.collection.mapReduce("
+ "function() {emit(this.class, this.marks);},"
+ "function(key, values) { return {\"sum\":Array.sum(values)};},"
+ "{ "
+ " query : {_id:{$lt:50}},"
+ "out:\"collectionMapReduce\""
+ "}"
+ ")";
Object result = mongodb.eval(script);
我收到以下错误:
Exception in thread "main" com.mongodb.MongoException$Network: Read operation to server localhost:27017 failed on database testDB
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:298)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:269)
at com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84)
at com.mongodb.DB.command(DB.java:320)
at com.mongodb.DB.command(DB.java:299)
at com.mongodb.DB.command(DB.java:374)
at com.mongodb.DB.command(DB.java:246)
at com.mongodb.DB.doEval(DB.java:445)
at com.mongodb.DB.eval(DB.java:463)
at com.dev.TestMapReduce.main(TestMapReduce.java:25)
Caused by: java.io.EOFException
at org.bson.io.Bits.readFully(Bits.java:75)
at org.bson.io.Bits.readFully(Bits.java:50)
at org.bson.io.Bits.readFully(Bits.java:37)
at com.mongodb.Response.<init>(Response.java:42)
at com.mongodb.DBPort.execute(DBPort.java:164)
at com.mongodb.DBPort.execute(DBPort.java:158)
at com.mongodb.DBPort.doOperation(DBPort.java:187)
at com.mongodb.DBPort.call(DBPort.java:158)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:290)
... 9 more
我无法理解此错误的原因。我该如何解决这个问题?
Note: I am able to perform this job using db.collection.mapReduce()
.
But I am just trying to achieve this using db.eval()
运行 map/reduce 工作的正确方法是通过 mapReduce
command which is exposed in the Java driver via the MapReduceCommand
helper。
eval
command 并非用于此目的(并且在 MongoDB 3.0 中也已弃用)。
我正在尝试 运行 使用 db.eval()
方法的 map-reduce 脚本。
MongoClient mongo = new MongoClient("localhost", 27017);
DB mongodb = (DB) mongo.getDB("testDB");
String script = "db.collection.mapReduce("
+ "function() {emit(this.class, this.marks);},"
+ "function(key, values) { return {\"sum\":Array.sum(values)};},"
+ "{ "
+ " query : {_id:{$lt:50}},"
+ "out:\"collectionMapReduce\""
+ "}"
+ ")";
Object result = mongodb.eval(script);
我收到以下错误:
Exception in thread "main" com.mongodb.MongoException$Network: Read operation to server localhost:27017 failed on database testDB
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:298)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:269)
at com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84)
at com.mongodb.DB.command(DB.java:320)
at com.mongodb.DB.command(DB.java:299)
at com.mongodb.DB.command(DB.java:374)
at com.mongodb.DB.command(DB.java:246)
at com.mongodb.DB.doEval(DB.java:445)
at com.mongodb.DB.eval(DB.java:463)
at com.dev.TestMapReduce.main(TestMapReduce.java:25)
Caused by: java.io.EOFException
at org.bson.io.Bits.readFully(Bits.java:75)
at org.bson.io.Bits.readFully(Bits.java:50)
at org.bson.io.Bits.readFully(Bits.java:37)
at com.mongodb.Response.<init>(Response.java:42)
at com.mongodb.DBPort.execute(DBPort.java:164)
at com.mongodb.DBPort.execute(DBPort.java:158)
at com.mongodb.DBPort.doOperation(DBPort.java:187)
at com.mongodb.DBPort.call(DBPort.java:158)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:290)
... 9 more
我无法理解此错误的原因。我该如何解决这个问题?
Note: I am able to perform this job using
db.collection.mapReduce()
. But I am just trying to achieve this usingdb.eval()
运行 map/reduce 工作的正确方法是通过 mapReduce
command which is exposed in the Java driver via the MapReduceCommand
helper。
eval
command 并非用于此目的(并且在 MongoDB 3.0 中也已弃用)。