(1)获取数据库对象:

//获取数据库对象
MongoDatabase mongoDatabase = mongoClient.getDatabase("lsy_test");

(2)获取集合对象:

//获取集合对象
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("test_user");

(3)增加单条数据:

Document中有一个自己唯一字段_id,默认为ObjectId类型,也可以自定义_id的类型,只要保证唯一即可,比如:UUID等。

/**
     * 增加单条数据
     * @param mongoCollection
     */
    public void addOneDocument(MongoCollection<Document> mongoCollection){
        Document document = new Document();
        document.append("user_name","test");
        document.append("pwd","0000000000");
        document.append("phone","000000000000");
        document.append("_id",UUID.randomUUID().toString());
        mongoCollection.insertOne(document);
    }

(4)增加多条数据:

Document中有一个自己唯一字段_id,默认为ObjectId类型,也可以自定义_id的类型,只要保证唯一即可,比如:UUID等。

/**
     * 增加多条数据
     * @param mongoCollection
     */
    public void addMultipleDocument(MongoCollection<Document> mongoCollection){
        Document documentOne = new Document();
        documentOne.append("user_name","test_01");
        documentOne.append("pwd","1111111");
        documentOne.append("phone","1111111");
        documentOne.append("_id",UUID.randomUUID().toString());

        Document documentTwo = new Document();
        documentTwo.append("user_name","test_02");
        documentTwo.append("pwd","2222222");
        documentTwo.append("phone","22222222222");
        documentTwo.append("_id",UUID.randomUUID().toString());

        List<Document> documentList = new ArrayList<Document>();
        documentList.add(documentOne);
        documentList.add(documentTwo);
        mongoCollection.insertMany(documentList);
    }

(5)AND查询条件:

/**
     * AND查询条件
     * @param mongoCollection
     */
    public List<Document> queryAndCondition(MongoCollection<Document> mongoCollection){
        //根据字段值查询数据,类似sql中的where条件,多个AND条件直接在document对象中添加即可
        //意义:user_name='liusy' and pwd='123456'
        Document bsonDocument = new Document();
        bsonDocument.append("user_name","liusy");
        bsonDocument.append("pwd","123456");
        FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
        List<Document> documentList = new ArrayList<Document>();
        //获取查询结果转为对象集合
        return findDocument.into(documentList);
    }

(6)OR查询条件:

/**
     * OR查询条件
     * @param mongoCollection
     */
    public List<Document> queryOrCondition(MongoCollection<Document> mongoCollection){
        /**
         * 根据字段值查询数据,类似sql中的where条件,多个OR条件代表着先创建多个document对象存储在一个list中,
         * 最后通过$or将document的集合存储在一个整体的document中进行查询
         */
        //意义:user_name='liusy' or pwd='123456'
        BasicDBList conditionList = new BasicDBList();
        Document documentOne = new Document();//user_name查询条件对象
        documentOne.append("user_name","liusy");
        conditionList.add(documentOne);
        Document documentTwo = new Document();//pwd查询条件对象
        documentTwo.append("pwd","123456");
        conditionList.add(documentTwo);
        Document queryCondition = new Document();
        queryCondition.append("$or",conditionList);//整体or查询条件对象
        FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
        List<Document> documentList = new ArrayList<Document>();
        //获取查询结果转为对象集合
        return findDocument.into(documentList);
    }

(7)AND与OR查询条件:

/**
     * AND与OR查询条件
     * @param mongoCollection
     */
    public List<Document> queryAndOrConditon(MongoCollection<Document> mongoCollection){
        /**
         * 根据字段值查询数据,类似sql中的where条件,根据AND、OR条件逻辑,通过$and、$or等逐层组装document查询条件封装,
         * 最后形成一个整体的查询条件
         */
        //意义:pwd='123456' and (user_name = 'liusy' or phone = '0000')
        BasicDBList orConditionList = new BasicDBList();
        Document documentOne = new Document("user_name","liusy");//user_name查询条件对象
        orConditionList.add(documentOne);
        Document documentTwo = new Document("phone","0000");//phone查询条件对象
        orConditionList.add(documentTwo);
        Document orQueryCondition = new Document();//or查询条件对象
        orQueryCondition.append("$or",orConditionList);
        Document documentThree = new Document("pwd","123456");//pwd查询条件对象
        BasicDBList conditionList = new BasicDBList();
        conditionList.add(documentThree);
        conditionList.add(orQueryCondition);
        Document queryCondition = new Document();//整体查询对象
        queryCondition.append("$and",conditionList);
        FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
        List<Document> documentList = new ArrayList<Document>();
        return findDocument.into(documentList);
    }

(8)IN查询条件:

/**
     * IN查询条件
     * @param mongoCollection
     */
    public List<Document> queryInCondition(MongoCollection<Document> mongoCollection){
        /**
         * 根据字段值查询数据,类似sql中的where条件,将in的值存储在一个list集合中,然后将list集合存储在document查询条件对象中。
         */
        //意义:pwd in {'0000','123456','222222'}
        List<String> phoneList = new ArrayList<String>();
        phoneList.add("0000");
        phoneList.add("123456");
        phoneList.add("222222");
        Document document = new Document();//phone的in值对象
        document.append("$in",phoneList);
        Document queryCondition = new Document();
        queryCondition.append("pwd",document);
        FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
        List<Document> documentList = new ArrayList<Document>();
        return findDocument.into(documentList);
    }

(9)NOT IN查询条件:

/**
     * NOT IN查询条件
     * @param mongoCollection
     */
    public List<Document> queryNotInCondition(MongoCollection<Document> mongoCollection){
        /**
         * 根据字段值查询数据,类似sql中的where条件,将not in的值存储在一个list集合中,然后将list集合存储在document查询条件对象中。
         */
        //意义:pwd not in {'0000','123456','222222'}
        List<String> phoneList = new ArrayList<String>();
        phoneList.add("0000");
        phoneList.add("123456");
        phoneList.add("222222");
        Document document = new Document();//phone的not in值对象
        document.append("$nin",phoneList);
        Document queryCondition = new Document();
        queryCondition.append("pwd",document);
        FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
        List<Document> documentList = new ArrayList<Document>();
        return findDocument.into(documentList);
    }

(10)修改单条数据:

/**
     * 修改单条数据
     * @param mongoCollection
     */
    public Long updateOneDocument(MongoCollection<Document> mongoCollection){
        //根据字段值查询数据,类似sql中的where条件
        Document bsonDocument = new Document();
        bsonDocument.append("user_name","test_01");
        //将需要修改的字段新值存储到一个对象中
        Document updateDocument = new Document();
        updateDocument.append("user_name","test_01_update");
        updateDocument.append("pwd","111111_update");
        updateDocument.append("phone","11111111_update_phone");
        //将需要修改的新值对象set到一个对象中,类似sql中的set
        Document setDocument = new Document("$set",updateDocument);
        //将查询条件对象、修改set对象传递给updateOne方法进行修改,返回修改数量
        Long modifiedCount = mongoCollection.updateOne(bsonDocument,setDocument).getModifiedCount();
        return modifiedCount;
    }

(11)修改多条数据:

/**
     * 修改多条数据
     * @param mongoCollection
     */
    public Long updateMultipleDocument(MongoCollection<Document> mongoCollection){
        //根据字段值查询数据,类似sql中的where条件
        Document bsonDocument = new Document();
        bsonDocument.append("phone","1111111");
        //将需要修改的字段新值存储到一个对象中
        Document updateDocument = new Document();
        updateDocument.append("phone","update_phone_multiple");
        //将需要修改的新值对象set到一个对象中,类似sql中的set
        Document setDocument = new Document("$set",updateDocument);
        //将查询条件对象、修改set对象传递给updateOne方法进行修改,返回修改数量
        Long modifiedCount = mongoCollection.updateMany(bsonDocument,setDocument).getModifiedCount();
        return modifiedCount;
    }

(12)替换某条数据:

替换某条数据,就是将该条数据之前的字段全部去掉,按照最新的字段进行存储。

/**
     * 替换某条数据
     * @param mongoCollection
     */
    public Long replaceOneDocument(MongoCollection<Document> mongoCollection){
        Document document = new Document();
        document.append("_id","db56bb73-c7a9-4d66-bdea-bc4c19f587f5");
        Document replaceDocument = new Document();
        replaceDocument.append("user_names","test_replace");
        replaceDocument.append("passwords","66666");
        replaceDocument.append("replace_date",new Date());
        Long modifiedCount = mongoCollection.replaceOne(document,replaceDocument).getModifiedCount();
        return modifiedCount;
    }

(13)删除单条数据:

/**
     * 删除单条数据
     * @param mongoCollection
     */
    public Long deleteOneDocument(MongoCollection<Document> mongoCollection){
        Document document = new Document();
        document.append("_id","db56bb73-c7a9-4d66-bdea-bc4c19f587f5");
        Long deletedCounts = mongoCollection.deleteOne(document).getDeletedCount();
        return deletedCounts;
    }

(14)删除多条数据:

/**
     * 删除多条数据
     * @param mongoCollection
     */
    public Long deleteMultipleDocument(MongoCollection<Document> mongoCollection){
        Document document = new Document();
        document.append("pwd","222222");
        Long deletedCounts = mongoCollection.deleteMany(document).getDeletedCount();
        return deletedCounts;
    }

(15)查看单条数据:

/**
     * 查询单条数据
     * @param mongoCollection
     */
    public Document queryOneDocument(MongoCollection<Document> mongoCollection){
        //根据字段值查询数据,类似sql中的where条件
        Document bsonDocument = new Document();
        bsonDocument.append("user_name","test_01");
        FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
        //获取查询结果的一条对象
        return findDocument.first();
    }

(16)查看多条数据:

/**
     * 查询多条数据
     * @param mongoCollection
     */
    public List<Document> queryMultipleDocument(MongoCollection<Document> mongoCollection){
        //根据字段值查询数据,类似sql中的where条件
        Document bsonDocument = new Document();
        bsonDocument.append("phone","1111111");
        FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
        List<Document> documentList = new ArrayList<Document>();
        //将查询结果转换为对象集合
        findDocument.into(documentList);
        return documentList;
    }

(17)查看排序数据:

/**
     * 查询数据排序
     * @param mongoCollection
     * @return
     */
    public List<Document> querySortDocument(MongoCollection<Document> mongoCollection){
        Bson ascBson = Sorts.ascending("phone");//升序
        Bson descBson = Sorts.descending("phone");//降序
        FindIterable<Document> findDocument = mongoCollection.find().sort(descBson);
        List<Document> documentList = new ArrayList<Document>();
        //将查询结果转换为对象集合
        findDocument.into(documentList);
        return documentList;
    }

(18)全模糊查询数据:

/**
     * 全模糊查询
     * @param mongoCollection
     */
    public List<Document> queryLikeDocument(MongoCollection<Document> mongoCollection){
        //意义:like '%san%'
        Document bsonDocument = new Document();
        Pattern pattern = Pattern.compile("^.*san.*$",Pattern.CASE_INSENSITIVE);//哪侧有%哪侧就带.*
        bsonDocument.append("user_name",pattern);
        FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
        List<Document> documentList = new ArrayList<Document>();
        //将查询结果转换为对象集合
        findDocument.into(documentList);
        return documentList;
    }

(19)左模糊查询数据:

/**
     * 左模糊查询
     * @param mongoCollection
     */
    public List<Document> queryLeftLikeDocument(MongoCollection<Document> mongoCollection){
        //意义:like '%san'
        Document bsonDocument = new Document();
        Pattern pattern = Pattern.compile("^.*san$",Pattern.CASE_INSENSITIVE);//哪侧有%哪侧就带.*
        bsonDocument.append("user_name",pattern);
        FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
        List<Document> documentList = new ArrayList<Document>();
        //将查询结果转换为对象集合
        findDocument.into(documentList);
        return documentList;
    }

(20)右模糊查询数据:

/**
     * 右模糊查询
     * @param mongoCollection
     */
    public List<Document> queryRightLikeDocument(MongoCollection<Document> mongoCollection){
        //意义:like 'liu%'
        Document bsonDocument = new Document();
        Pattern pattern = Pattern.compile("^liu.*$",Pattern.CASE_INSENSITIVE);//哪侧有%哪侧就带.*
        bsonDocument.append("user_name",pattern);
        FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
        List<Document> documentList = new ArrayList<Document>();
        //将查询结果转换为对象集合
        findDocument.into(documentList);
        return documentList;
    }

(21)分页查询数据:

/**
     * 分页查看数据
     * @param mongoCollection
     */
    public List<Document> queryLimitDocument(MongoCollection<Document> mongoCollection,Integer startIndex,Integer pageSize){
        Integer startIndexInt = startIndex;//起始角标
        Integer pageSizeInt = pageSize;//分页大小
        FindIterable<Document> findDocument = mongoCollection.find().skip(startIndexInt).limit(pageSizeInt);
        List<Document> documentList = new ArrayList<Document>();
        //将查询结果转换为对象集合
        findDocument.into(documentList);
        return documentList;
    }

(22)分组统计数据:

/**
     * 分组统计数据
     * @param mongoCollection
     */
    public List<Document> queryGroupByDocument(MongoCollection<Document> mongoCollection){
        /**
         * 意义:select pwd,count(*) 'count' from test_user group by pwd
         * mongodb表达式:db.lsy_test.test_user([{$group:{_id:{pwd:$pwd},total_counts:{$sum,1}}}]);
         */
        List<Document> documentList = new ArrayList<Document>();
        Document groupDoc = new Document();
        groupDoc.append("pwd","$pwd");
        groupDoc.append("phone","$phone");
        Document documentTwo = new Document();
        documentTwo.append("_id",groupDoc);//用来存储group字段,可以存储多个字段
        documentTwo.append("total_counts",new Document("$sum",1));//用来存储group分组后执行的函数
        Document document = new Document();
        document.append("$group",documentTwo);
        documentList.add(document);
        AggregateIterable<Document> aggretateResult = mongoCollection.aggregate(documentList);
        List<Document> resultDocumentList = new ArrayList<Document>();
        return aggretateResult.into(resultDocumentList);
    }