jialiguo 发表于 2016-12-2 09:18:33

mongo数据库动态添加procedure(存储过程)

           mongo DB同样支持存储过程,和别的一些数据库的不同的是mongo的procedure是以javascript形式存储在内部一个叫system.js的collection里的。可以使用mongo的JDBC驱动中的API对procedure进行动态的添加。
下面为代码demo:
             Mongo mongo = new Mongo("10.232.31.46",27015);
       DB db = mongo.getDB("dbName");
       if ("username" != null) {
           boolean auth = db.authenticate("username",
                  "password" == null ? new char : "password".toCharArray());
           if (!auth) {
              throw new MongoException("authenticatefailed!");
           }
       }
       
       //获取存储procedure的collection
       DBCollection coll = db.getCollection("system.js");     
       BasicDBObject dbObject = new BasicDBObject();
      
       dbObject.put("_id", "addNumbers");
       //procedure的具体内容不能使用string类型存入,需要使用driver中定义的code类型
       dbObject.put("value", new Code("function(x,y){ return x + y; }"));
      
       //将存储过程动态的添加到该集合中
       coll.save(dbObject);
 
 
       添加进去即可在进行查询等的时候调用procedure。如输入{"$where":"addNumbers(a,1)==4"}
      也可使用db的eval()方法直接测试调用procedure。如db.eval("function(x,y){ return x + y; }", 3,4);
      另:
        我觉得也可以使用DB中的command()方法,可以直接执行命令行里的命令,感觉也可以通过这种方法添加procedure。
            上面是最近做项目需要用到自定义动态添加mongoDB的procedure,感觉可能还有许多错误的地方,以后深入了解了过后再校正。
 
页: [1]
查看完整版本: mongo数据库动态添加procedure(存储过程)