在system.js中保存一个javascript函数 - 带Java的MongoDB

时间:2015-12-04 20:07:06

标签: javascript java mongodb

我必须使用Java驱动程序(< 3.0.0版本)在集合system.js中插入javascript函数。
system.js是MongoDB的一个特殊集合,用于存储javascript函数以供重用。 我需要存储此函数以将其与map / reduce命令一起使用。

从MongoDB shell我使用:

db.system.js.save(
   {
     _id: "echoFunction",
     value : function(x) { return x; }
   }
)

使用Java驱动程序我试图以字符串的形式插入函数值:

try{
    MongoClient mongoclient = new MongoClient(HOST,PORT);
    DB db = mongoclient.getDB("test");
    System.out.println("Succesfully connected to MongoDB");
    DBCollection jsColl = db.getCollection("system.js");
    DBObject doc = new BasicDBObject("_id","echoFunction").append("value","function(x) {return x}");
    jsColl.insert(doc);
}

DBObject doc已正确添加到system.js集合中,但我的函数从MongoDB看作字符串而不是javascript函数,因此我无法将其与map / reduce命令一起使用。

1 个答案:

答案 0 :(得分:0)

你必须把一个Object作为org.bson.types.Code放到像

这样的值中
Code functionCode = new Code ("function(x) {return x}") ; 
DBObject doc = new BasicDBObject("_id","echoFunction").append("value",functionCode);