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("'查询字段' : '查询内容'");

skippagesizecount(总数)的关系

int pageCount = count%pagesize==0 ? count/pagesize : count/pagesize+1;
int skip_count = 0;
skip_count = (i - 1) * pagesize;

根据过滤条件执行查找

//database是上面createMongoDatabase创建的
MongoCursor<Document> 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

展开阅读全文

没有更多推荐了,返回首页