mongodb java 执行js_Java连接mongodb,Java运行mongodb js脚本

java连接mongodb

java创建mongodb客户端,并且根据用户登陆信息,获取相应的mongodb的database。对于创建mongodb的连接客户端,对于这个创建ibatis中也有此类用法。他们大致意思是相同的。其实这些难度都是很小的,大部分难的是一个写法。记下这个写法写这些东西都不是事情。

/** 数据库的host */

private String mongo_host = "";

/** 数据库的port */

private int mongo_port = 0;

/** 数据库的db名称 */

private String mongo_dbName = "";

/** 数据库的db的用户名 */

private String mongo_user = "";

/** 数据库的db的密码 */

private String mongo_passwd = "";

/** 查询条件 */

private String query_criteria = "";

/** mongo客户端 */

private MongoClient mongoClient = null;

/**表名称*/

private String collection_name;

public MongoDatabase createMongoDatabase() {

MongoClientOptions.Builder userdbBuilder = MongoClientOptions.builder();

userdbBuilder.connectTimeout("");

userdbBuilder.socketTimeout("");

userdbBuilder.maxWaitTime("");

userdbBuilder.connectionsPerHost("");

userdbBuilder.readPreference(ReadPreference.secondaryPreferred());

MongoClientOptions userdbOptions = userdbBuilder.build();

MongoCredential mongoCredential = null;

if (StringUtils.isNotBlank(this.mongo_user)) {

mongoCredential = MongoCredential.createScramSha1Credential(

"mongo_user",

"mongo_dbName",

"mongo_passwd".toCharArray());

}

ServerAddress serverAddress = new ServerAddress(

this.mongo_host, this.mongo_port);

//创建mongodb的连接客户端,对于这个创建ibatis中也有此类用法

this.mongoClient = new MongoClient(

serverAddress,

mongoCredential,

userdbOptions);

MongoDatabase coll = this.mongoClient.getDatabase("mongoDBName");

return coll;

}

使用创建好的mongodb客户端获取到的database,来执行对应的增删改查。如下的创建一个查询条件,有两种写法

BasicDBObject query = new BasicDBObject();

query.put("字段", "查询条件");

//另一种写法

query = BasicDBObject.parse("'查询字段' : '查询内容'");

skip,pagesize,count(总数)的关系

int pageCount = count%pagesize==0 ? count/pagesize : count/pagesize+1;

int skip_count = 0;

skip_count = (i - 1) * pagesize;

根据过滤条件执行查找

//database是上面createMongoDatabase创建的

MongoCursor cursor = database.getCollection("collectionName")

.find(query)

.skip("")

.limit(1000)

.iterator();

遍历获取查询到的内容

//遍历数据

while(cursor.hasNext()) {

Document document = cursor.next();

JSONObject jsonObject = JSONObject.parseObject(document.toJson());

this.target_database.getCollection("collectionName").insertOne(document);

System.out.println(jsonObject);

}

java执行js连接mongodb

Java运行mongodb js脚本,主要思想是,Java执行js。下面是连接数据库的脚本。用户名密码已经数据库名字已经被删掉,你可以自行添加自己特定的。

load("nashorn:mozilla_compat.js");

importPackage(java.util)

var serverAddress = new com.mongodb.ServerAddress("db ip address", portNum);

var credentials = com.mongodb.MongoCredential.createScramSha1Credential(

"user",

"dbname",

"password".toCharArray());

var dbname = "dbname";

var collctionName = "collctionName";

var userdbBuilder = com.mongodb.MongoClientOptions.builder();

userdbBuilder.readPreference(com.mongodb.ReadPreference.secondaryPreferred());

var userdbOptions = userdbBuilder.build();

var dataSrcClient = new com.mongodb.MongoClient(serverAddress, credentials, userdbOptions);

var collection = dataSrcClient.getDatabase(dbname).getCollection(collctionName);

var dc = collection.find(org.bson.Document.parse("{'category':'试测'}")).iterator();

while(dc.hasNext()) {

var dbObj = dc.next();

print("开始打印数据库表的值 " + collctionName)

print(dbObj.getString("word"));

}

dc.close();

dataSrcClient.close();

有了上面的脚本后,你可以创建java的js执行引擎,然后执行这段代码。

private ScriptEngine scriptEngine =

new ScriptEngineManager().getEngineByName("nashorn");

这段读写的代码,可以在上上篇博客里ibatis源码解析找到。有没有发现,这些大神级别的框架里面提供源码的东西都是极其优秀和可借鉴。而且代码写的非常优雅。

Reader reader = new InputStreamReader(

ClassLoader.getSystemResourceAsStream("js路径地址"));

scriptEngine.eval(reader);

Java和Javascript通信

执行js代码,明白一个重要东西就是js中的变量和java中的变量进行交互。

Java中js引擎中添加java变量,注意一点scriptEngine.put中的key,value名称要保持一致

scriptEngine.put("targetDocument", targetDocument);

在js中就可以使用这个变量。将如下的脚本内容放在String变量script_str中。

print('打印出来的值 -->' + input);

input = JSON.parse(input);

targetDocument.append('variables', input);

null

java执行上面的脚本内容

CompiledScript compiledScript = ((Compilable) scriptEngine).compile(script_str);

String javascriptResultValue= compiledScript.eval();

//验证变量是否被Javascript改变

log.info(targetDocument);

水平原因可能存在错误,您的指正和评论是我前进动力!我的邮件地址: chenrui@marsdl.com。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值