java 操作mongodb3.x


package com.labci.mongodb.test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.poi.ss.formula.functions.T;
import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import com.robustel.iot.data.parse.entity.DeviceCommunicationModuleData;
import com.robustel.pl.util.utils.UUIDUtil;

/**
* 功能说明:java链接操作mongodb
*
* 思路:1.建立连接并验证 2.获取一个集合列表 3.获取选择第一
* 个集合 4.插入集合 5.查询集合
*/
public class MongodbTest {

static List<String> companyIds = new ArrayList<String>(500);

static List<String> deviceIds = new ArrayList<String>(20000);
static MongodbTest mo = new MongodbTest();
static MongoDatabase db = mo.connectMongoDB("link_user", "rlink", "123456".toCharArray());

/**
* 连接mongodb数据库服务,验证用户名密码
*
* @return
*/
private MongoDatabase connectMongoDB(String name, String databaseName, char[] pswd)
{
//创建个 credential对象
MongoCredential credential = MongoCredential.createCredential(name, databaseName, pswd);
//把对象传入mongoClient的构造方法中,说明:用户名密码端口啥的都正确会得到mongoClient,否则程序会报错
//mongodb还有很多种验证方式 详见:http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/
MongoClient mongoClient = new MongoClient(new ServerAddress("172.16.7.110", 27017), Arrays.asList(credential));
MongoDatabase db = mongoClient.getDatabase("rlink");
return db;
}

/**
* 获取一个文档
*
* @param db
*/
private MongoCollection<Document> getDBCollection(MongoDatabase db, String setName)
{
MongoIterable<String> cols = db.listCollectionNames();
for (String c : cols)
{
System.out.println("collectionName: " + c);
}
MongoCollection<Document> col = db.getCollection(setName);
if (col != null)
return col;
else
return null;
}

/**
* 插入一条数据
*
* @param col
* @param username
* @param password
*/
private void insertCollection(MongoCollection<Document> col, String username, String password)
{
Document doc =new Document();
doc.put("usename", username);
doc.put("password", password);
col.insertOne(doc);
;
}

private void insertMany(MongoCollection<Document> col,
List<Document> documents){
col.insertMany(documents);
}

/**
* 查找一个doc
*
* @param colName
*/
private void findColByColName(MongoCollection<Document> doc)
{
FindIterable<Document> mydoc = doc.find();
for (Document d : mydoc)
{
System.out.println(d.toJson());
System.out.println(d.toString());
}
}


public static String randomLonLat(double MinLon, double MaxLon, double MinLat, double MaxLat, String type) {
Random random = new Random();
BigDecimal db = new BigDecimal(Math.random() * (MaxLon - MinLon) + MinLon);
String lon = db.setScale(6, BigDecimal.ROUND_HALF_UP).toString();// 小数后6位
db = new BigDecimal(Math.random() * (MaxLat - MinLat) + MinLat);
String lat = db.setScale(6, BigDecimal.ROUND_HALF_UP).toString();
if (type.equals("Lon")) {
return lon;
} else {
return lat;
}
}

public static void main(String[] args){

for(int i=0;i<500;i++){
companyIds.add(UUIDUtil.getKeys());
}

for(int i=0;i<20000;i++){
deviceIds.add(UUIDUtil.getKeys());
}

Integer count = 200000;
Integer betch = 1000;
Random random = new Random();

ExecutorService exec = Executors.newFixedThreadPool(150);

while(count >0 ){
exec.execute(new MongodbWork(count,betch,random,exec));
count--;
}

}

static class MongodbWork implements Runnable {
Integer count;
Random random;
ExecutorService exec;
Integer betch;
String collectionName = "gps";

public MongodbWork(Integer count,Integer betch,Random random,ExecutorService exec){
this.count = count;
this.betch = betch;
this.random = random;
this.exec = exec;
}

@Override
public void run() {

System.out.println(Thread.currentThread().getName() +"---"+count +"----"+betch+"---"+count);

List<Document> arrays = new ArrayList<Document>(betch);

for(int i=0;i< betch;i++){
Document mongoEntry =new Document();

mongoEntry.put("companyId",companyIds.get(random.nextInt(companyIds.size())));
mongoEntry.put("id",UUIDUtil.getKeys());
mongoEntry.put("createTime",new Date());
mongoEntry.put("deviceId",deviceIds.get(random.nextInt(deviceIds.size())));
mongoEntry.put("moduleCode","gps");
mongoEntry.put("deviceTime",new Date().getTime());

Map<String,Object> maps = new HashMap<String,Object>();
maps.put("longitude", randomLonLat(0, 2000, 0, 3000, "Lon"));
maps.put("latitude", randomLonLat(0, 2000, 0, 3000, "Lat"));

mongoEntry.put("fieldValue",maps);
arrays.add(mongoEntry);
}

MongoCollection<Document> doc = mo.getDBCollection(db, collectionName);
mo.insertMany(doc, arrays);
}

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

annan211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值