初识MongoDb

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,和大家共同学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值