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。