MongoDB第三天(正则,管道,聚合,字符串,算术,日期,java连接MongoDB)

部分正则表达式:

i:忽略大小写

m:多行查找

x:设置 x 选项后,正则表达式中的非转义的空白字符将被忽略  

s:允许点字符(即.)匹配包括换行符在内的所有字符。

w:匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。

 

查询 dev 集合中 title 字段以'S'开头的数据
 

db.dev.find({title:/^S/});

db.dev.find({title:{$regex:/^S/}}) 

 

查询 dev 集合中 title 字段以'g'结尾的数据

db.stu.find({title:/g$/});


db.stu.find({title:{$regex:/g$/}}); 

 

查询 dev 集合中 title 字段含有'g'的数据

db.stu.find({title:/ing/});

db.stu.find({title:{$regex:/ing/}});

 

查询 dev 集合中 title 字段s开头且忽略大小写的数据

db.dev.find({title:/^S/i});

db.dev.find({title:{$regex:/^S/i}});

db.dev.find({title:{$regex:/^S/, $options:"i"}});

 

查询 dev 集合中 title 字段已'S'开头、'g'结尾的数据

db.dev.find({title:/^S.*g$/});

db.dev.find({title:{$regex:/^z.*n$/}});

 

查询 dev 集合中 title 字段以'S''t'开头的数据

db.dev.find({title:{$in:[/^S/, /^t/]}});

 

查询 dev 集合中 title 字段不以'S'开头的数据

db.dev.find({title:{$not:/^S/}}); 

 

查询 dev 集合中 title 字段不以'S''t'开头的数据

db.stu.find({title:{$nin:[/^S/, /^t/]}});

 

 

Mongodb的聚合操作

语法格式:

db.COLLECTION_NAME.aggregate([{$group:{_id:"$分组键名","$分组键名",.....,别名:{聚合运算:"$运算列"}}},{条件筛选:{键名:{运算条件:运算值}}}])

 

$match:条件筛选,经常和$group搭配使用,在group前面相当于,MySQL中的where在group的后面,相当于having。

$group:分组

$sort:相当于order by排序 1表示顺序,-1表示倒叙

$sum:表示求和

$unwind:数组拆分

 

管道操作:

当前的查询结果,会被下一条命令作为参数。类似传递,且管道操作时可以重复的,也是顺序执行

管道操作符:$match$group$sort$limit$skip$unwind

管道操作符,只能用于计算当前聚合管道的文档,不能处理其它的文档

 

实现聚合投影约束

$project 操作符:我们可以使用$project 操作符做聚合投影操作。

db.develop.aggregate([{$project:{_id:0,name:1,ame:1,age:1,title:1,time:1}}])

 

 

字符串操作

toLower:小写

toUpper:大写

db.develop.aggregate([{$project:{_id:0,Name:{$toUpper:'$name'}}}])

$Substr:只能截取匹配ascll码的数据,$substrCP 可以截取中文和字符串

 

 加法 乘法 除法  取模 :

加:

db.dev.aggregate([{$match:{size:{$ne:null}}},{$project:{_id:0,title:1,New_Size:{$add:["$si

ze",1]}}}])

减:

db.dev.aggregate([{$match:{size:{$ne:null}}},{$project:{_id:0,title:1,New_Size:{$subtract:[

"$size",1]}}}])

 

db.dev.aggregate([{$match:{size:{$ne:null}}},{$project:{_id:0,title:1,New_Size:{$multiply:

["$size",2]}}}]) 

db.dev.aggregate([{$match:{size:{$ne:null}}},{$project:{_id:0,title:1,New_Size:{$divide:["

$size",2]}}}])

取余 
 

db.dev.aggregate([{$match:{size:{$ne:null}}},{$project:{_id:0,title:1,New_Size:{$mod:["$s

ize",2]}}}])

 

 

 

日期处理

俩种插入日期的方式:

方式一:

db.dev.insert({time:new Date("2018-05-01T14:20:23Z")}) 

new Date("2018-05-01T14:20:23Z"):创建时间对象,日期格式为 yyyy-MM-ddThh:mm:ss

 

方式二:

db.dev.insert({time:ISODate("2019-06-01T16:30:00Z")})

ISODate("2019-06-01T16:30:00Z"):

 

 

查询日期的方式

第一种:

db.dev.find({time:{$eq:new Date("2018-05-01T14:20:23")}})

 

第二种:

db.dev.find({time:{$gt:new Date("2018-04-01")}}) 

 

第三种:

db.dev.find({time:{$eq:ISODate("2018-05-01T14:20:23")}})

 

显示年月日:

{$year:"$birth"}:年份
{$month:"$birth"}:月份
{$dayOfMonth:"$birth"}:日期
db.develop.aggregate([{$match:{ame:'admin'}},{$project:{年份:{$year:'$birth'},月份:{$month:'$birth'},日:{$dayOfMonth:'$birth'}}}])

 

显示时分秒毫秒:

{$hour:"$birth"}:小时
{$minute:"$birth"}:分钟
{$second:"$birth"}:
{$millisecond:"$birth"}:毫秒
db.develop.aggregate([{$match:{ame:'admin'}},{$project:{年份:{$year:'$birth'},月份:{$month:'$birth'},日:{$dayOfMonth:'$birth'},时:{$hour:'$birth'},分:{$minute:'$birth'},秒:{$millisecond:'$birth'}}}])

 

 

java连接MongoDB数据的方式

直连:

package com.bjsxt.mongodbdemo;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBUtil {

    private static MongoClient client=null;
    static {
        if (client==null){
            client=new MongoClient("192.168.181.132",27017);
        }

    }

    //获取MongoDB数据库
    public static MongoDatabase getDatebase(String dbName){
            return client.getDatabase(dbName);
    }

    //获取MongoDB集合
    public static MongoCollection getCollection(String dbName,String collName){
        MongoDatabase database=getDatebase(dbName);
        return database.getCollection(collName);
    }
}

 

直连认证:

package com.bjsxt.mongodbdemo;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import java.util.Arrays;

/**
 * 创建MongoDB拦截-用户认证
 */
public class MongoDBAuthUtil {
    private static MongoClient client=null;
    static {
        if (client==null){
            //创建一个用户封装认证信息
            MongoCredential credential = MongoCredential.createCredential("bjsxt", "develop", "bjsxt".toCharArray());

            //封装MongoDB的地址与端口
            ServerAddress address=new ServerAddress("192.168.181.132",27017);
            client=new MongoClient(address, Arrays.asList(credential));

        }

    }

    //获取MongoDB数据库
    public static MongoDatabase getDatebase(String dbName){
        return client.getDatabase(dbName);
    }

    //获取MongoDB集合
    public static MongoCollection getCollection(String dbName, String collName){
        MongoDatabase database=getDatebase(dbName);
        return database.getCollection(collName);
    }
}

 

池连:

package com.bjsxt.mongodbdemo;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import java.util.Arrays;

/**
 * 池连
 */
public class MongoDBPoolUtil {

    private static MongoClient client=null;
    static {
        if (client==null){
            MongoClientOptions.Builder builder=new MongoClientOptions.Builder();
            builder.connectionsPerHost(10);//每个地址的最大连接数

            builder.connectTimeout(5000);//连接超时时间

            builder.socketTimeout(5000);//读写操作超时时间

            //封装MongoDB的地址与端口
            ServerAddress address=new ServerAddress("192.168.181.132",27017);
            client=new MongoClient(address, builder.build());

        }

    }

    //获取MongoDB数据库
    public static MongoDatabase getDatebase(String dbName){
        return client.getDatabase(dbName);
    }

    //获取MongoDB集合
    public static MongoCollection getCollection(String dbName, String collName){
        MongoDatabase database=getDatebase(dbName);
        return database.getCollection(collName);
    }
}

 

池连认证:

package com.bjsxt.mongodbdemo;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBPoolAuthUtil {
    private static MongoClient client=null;
    static {
        if (client==null){
            MongoClientOptions.Builder builder=new MongoClientOptions.Builder();
            builder.connectionsPerHost(10);//每个地址的最大连接数

            builder.connectTimeout(5000);//连接超时时间

            builder.socketTimeout(5000);//读写操作超时时间

            //创建一个用户封装认证信息
            MongoCredential credential = MongoCredential.createCredential("bjsxt", "admin", "bjsxt".toCharArray());
            //封装MongoDB的地址与端口
            ServerAddress address=new ServerAddress("192.168.181.132",27017);
            client=new MongoClient(address,credential,builder.build());

        }

    }

    //获取MongoDB数据库
    public static MongoDatabase getDatebase(String dbName){
        return client.getDatabase(dbName);
    }

    //获取MongoDB集合
    public static MongoCollection getCollection(String dbName, String collName){
        MongoDatabase database=getDatebase(dbName);
        return database.getCollection(collName);
    }

    //创建集合
    public static void createCollection(String dbName,String collName){
        MongoDatabase database=getDatebase(dbName);
        database.createCollection(collName);
    }

    //删除集合
    public static void dropCollection(MongoCollection collection){
        collection.drop();
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-12-11 08:56  sakura-yxf  阅读(572)  评论(0)    收藏  举报