package com.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.db.mongo.CollectionMapDoorSensor;
import com.db.mongo.CollectionMapWifiLock;
import com.db.mongo.MongodbHelperDoorSensor;
import com.db.mongo.MongodbHelperWifiLock;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.Test;
public class TestDemo {
/**
* mongodb插入数据
*/
@Test
public void testInsertMongodb() {
/**
* 这是我根据pid,这个值,写了一个算法,可以自动生成一个表并且带后缀,有助于分表。
* t_door_sensor_history18
* 比如 我根据传入A00318030100023267,得到t_door_sensor_history18表,18这个数字是自动生成的,具体算法以后分享给大家。
* 后面雷同
*/
//创建一个mongodb表(Mongodb有自动生成表的功能,当你需要该表的时候,他就能自动创建,这也是和sql相比,巨大的优势)
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100023267");
System.out.println(mongodbTableName);//t_door_sensor_history18
//创建该表的连接
MongoCollection<Document> collec = MongodbHelperDoorSensor.getCollection(mongodbTableName);
//封装一个json数据,存入到mongodb
JSONObject saveObj = new JSONObject();
saveObj.put("deviceId", "A00318030100023267");
saveObj.put("deviceType", "A003");
saveObj.put("timeCreate", Utils.getCurrentUnixTimeStampInSecond());
saveObj.put("age", "19");
//转换数据为bson
Document saveDoc = Document.parse(saveObj.toJSONString());
//插入到mongodb中
collec.insertOne(saveDoc);
}
/**
* mongodb查询
* 通过new Document来设置查询条件(对比通过Filters.and()来设置查询条件)
*/
@Test
public void testFindOneMongodb() {
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100023267");
MongoCollection<Document> collec = MongodbHelperDoorSensor.getCollection(mongodbTableName);
Document query = new Document("deviceId", "A00318030100023267");
FindIterable<Document> documents = collec.find(query);
for (Document d : documents) {
System.out.println(d.toJson());
}
}
/**
* mongodb条件查询
* 通过new Document来设置查询条件(对比通过Filters.and()来设置查询条件)
* $lte 小于等于
* $lt 小于
* $gte 大于等于
* $gt 大于
*/
@Test
public void testByConditions() {
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100023267");
MongoCollection<Document> collec = MongodbHelperDoorSensor.getCollection(mongodbTableName);
Document document = new Document("age", new Document("$lte", "11"));
System.out.println(document);
FindIterable<Document> documents = collec.find(document);
for (Document d : documents) {
System.out.println(d.toJson());
}
// { "_id" : { "$oid" : "5bd903e98e5b8f07f0067672" }, "deviceType" : "A003", "timeCreate" : 1540948968, "deviceId" : "A00318030100023267", "age" : "11" }
// { "_id" : { "$oid" : "5bd903f58e5b8f19001438e2" }, "deviceType" : "A003", "timeCreate" : 1540948980, "deviceId" : "A00318030100023267", "age" : "10" }
}
/**
* 通过Filters来设置查询条件(对比通过 new Document() 来设置查询条件)
* 推荐通过Filters来设置查询条件
*/
/**
* mongodb的插入
*/
@Test
public void test2InsertMongoDb(){
//创建一个mongodb表
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100042630");
//创建一个连接
MongoCollection<Document> collection = MongodbHelperDoorSensor.getCollection(mongodbTableName);
//封装一个数据
JSONObject saveObj = new JSONObject();
saveObj.put("devId","A00318030100042630");
saveObj.put("timeCreate",Utils.getCurrentUnixTimeStampInSecond());
saveObj.put("age","12");
//将数据转换为BSON
Document saveDoc = Document.parse(saveObj.toJSONString());
//将数据存入mongodb中
collection.insertOne(saveDoc);
}
/**
* 单条件查询
*/
@Test
public void test2FindMongoDb(){
//创建一个mongodb表
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100042630");
//创建一个连接
MongoCollection<Document> collection = MongodbHelperDoorSensor.getCollection(mongodbTableName);
//创建查询条件
Bson query = Filters.and(Filters.eq("devId", "A00318030100042630"));
//开始查询
FindIterable<Document> documents = collection.find(query);
for (Document d:documents) {
System.out.println(d.toJson());
}
}
/***
* 多条件查询
* gte 大于等于
* lte 小于等于
* gt 大于
* lt 小于
*/
@Test
public void test2FindConditionsMongoDb(){
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100042630");
MongoCollection<Document> collection = MongodbHelperDoorSensor.getCollection(mongodbTableName);
//通过Filters.and来创建查询条件(可以通过Document)
Bson query = Filters.and(Filters.eq("devId", "A00318030100042630"), Filters.gte("age", "10"),Filters.lte("age","11"));
FindIterable<Document> documents = collection.find(query);
for (Document d:documents) {
System.out.println(d.toJson());
}
}
/**
* 查询结果<升序>排序
* ascending 升序
* descending 降序
*/
@Test
public void test2FindOrderbyMongodb(){
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100042630");
MongoCollection<Document> collection = MongodbHelperDoorSensor.getCollection(mongodbTableName);
FindIterable<Document> documents = collection.find().sort(Sorts.ascending("age"));
for (Document d:documents) {
System.out.println(d.toJson());
}
}
/**
* 查询结果后再排序
*/
@Test
public void test2FindResultOrderByMongodb(){
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100042630");
MongoCollection<Document> collection = MongodbHelperDoorSensor.getCollection(mongodbTableName);
//设置查询条件
Bson query = Filters.and(Filters.eq("devId", "A00318030100042630"), Filters.gte("age", "11"));
//skip(i) 跳过前面第一条,取后面的1条
FindIterable<Document> documents = collection.find().filter(query).sort(Sorts.descending("age")).skip(1).limit(1);
for (Document d:documents) {
System.out.println(d.toJson());
}
}
/**
* mongodb修改数据
*/
@Test
public void test2DeleteMongodb(){
//获取mongodb数据表
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100042630");
MongoCollection<Document> collection = MongodbHelperDoorSensor.getCollection(mongodbTableName);
//创建修改主键 类似sql update语句中的where 条件
JSONObject canObj = new JSONObject();
canObj.put("devId","A00318030100042630");
canObj.put("age","18");
//设置修改变量
JSONObject setObj = new JSONObject();
setObj.put("age","12");
//转变数据为mongodb锁识别的字段
Document conDoc = Document.parse(canObj.toJSONString());
Document setDoc = Document.parse(setObj.toJSONString());
collection.updateOne(conDoc,new Document("$set",setDoc));
}
/**
* 删除多个
*/
@Test
public void testDeletMongodb(){
String mongodbTableName = CollectionMapDoorSensor.getSdsHistoryTableBySdsId("A00318030100023267");
MongoCollection<Document> collec = MongodbHelperDoorSensor.getCollection(mongodbTableName);
Bson query = Filters.and(Filters.eq("deviceId", "A00318030100023267"), Filters.lte("age", "11"),Filters.gte("age","10"));
//删除
DeleteResult deleteResult = collec.deleteMany(query);
System.out.println(deleteResult.getDeletedCount());
}
}
时下关于nosql是否取代sql(关系型数据库)的争论很多,但是作为一个程序猿,还是老是掌握技术,才是王道。不过,我认为,nosql语句无论从起插入的数据类型,还是查询的效率来讲,都是相对较好的,所以贴了几个demo,和大家共同学习。