MongoDB初识

====【MongoDB服务启动&链接】====
[root@CentOS ~]# mongod --port 27017 --dbpath /root/data/db/ --fork --syslog【后台】
[root@CentOS ~]# mongod --port 27017 --dbpath /root/data/db/ 【前台】
====【MongoDB常规数据类型】====
Double、 String 、 Object 、
Array 、 ObjectId 、Boolean 、
Date 、 Null 、Timestamp
数据类型:https://docs.mongodb.com/manual/reference/operator/query/type/#document-querying-by-data-type
====【常见的Shell】====
数据库
①创建数据
>use 数据库名;
②删除数据
>db.dropDatabase();
③查看Database
>show dbs|databases
④查看当前数据库
>db
集合
①创建
db.createCollection("t_user"); --建表
②固定集合:capped:必须为true、size单位KB、max最大元素。
db.createCollection("t_user",{
capped:true,
size:1,
max:2
});
说明:如果超过指定大小则,丢弃前面的元素,使用db.t_user.isCapped()
判断集合是否是固定集合。
③约束 (了解)
db.createCollection("t_user",
{ validator:{
$and:[
{name:{$type:'string',$exists:true}},
{age:{$type:'int',$exists:true}},
{sex:{$type:'bool',$exists:true}},
{birthDay:{$type:'date',$exists:true}}
]}
});
> db.t_user.insert({
name:"zhangsan",
age:NumberInt(18),
sex:true,
birthDay:new Date("1990-12-13")
});
更多参考:https://docs.mongodb.com/manual/core/document-validation/
====【MongoDB CRUD】====
①插入
> db.t_user.insertOne({id:1,name:'jiangzz'})
> db.t_user.insertMany([{id:2,name:'lisi'},{id:3,name:'wangwu'}])
> db.t_user.insert([{id:4,name:'zhaoliu'},{id:5,name:'win7'}])
注意:MongoDB的每条记录都有一个ObjectId,必须保持唯一。如果当用户
不指定的时候由系统自动生成。
mongodb insert()和save()的相同点和区别?
> db.t_user.insert({_id:1,name:"zs"})
> db.t_user.insert({_id:1,name:"lisi"})
> db.t_user.save({_id:1,name:"wangwu"})
> db.t_user.save({_id:1,name:"zhaoliu"})
总结:若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改
原来的内容为新内容。若新增的数据中没有主键时,都会增加一条记录。
②更新 multi、upsert 、$set/$unset/$incr
> db.t_user.updateOne({id:1},{$set:{salary:10000}})
> db.t_user.updateMany({id:{$gte:2}},{$set:{salary:10000}})
> db.t_user.replaceOne({id:1},{name:"jiangzz1"})
> db.t_user.update({id:1},{$set:{name:"jzz"}})
> db.t_user.update({name:"ww"},{$inc:{salary:1000}},{multi:true})
> db.t_user.update({id:1},{$inc:{salary:1000}},{multi:true})
> db.t_user.update({id:2},{$inc:{salary:1000}},{multi:true,upsert:true})
更多:https://docs.mongodb.com/manual/reference/operator/update/
③删除
> db.t_user.remove({salary:10000},{justOne:true})
等价
> db.t_user.deleteOne({salary:10000})
-------------------------------------------------
> db.t_user.remove({salary:10000})
等价
> db.t_user.deleteMany({salary:10000})
④查询(重点)
→查询Embedded/Nested文档
db.t_store.insert( [
{ item: "iphone6s", category: '手机', size: { h: 14, w: 21, type: "厘米" }, status: "A" },
{ item: "笔记本", category:'电脑', size: { h: 8.5, w: 11, type: "英尺" }, status: "A" }
]);
> db.t_store.find( { size: { w:21, h:14, type: "厘米" } } ) --错误
> db.t_store.find( { size: { h:14, w:21, type: "厘米" } } )
> db.t_store.find( { 'size.type': "厘米" } )
> db.t_store.find( { "size.h": { $lt: 15 } } )
→数组查询
db.t_store.insert( [
{ item: "iphone6s", category: '手机', color:["土豪金","玫瑰金","银灰色"]},
{ item: "笔记本", category:'电脑', color:["黑色","土豪金"]}
]);
> db.t_store.find({color:"土豪金"});
> db.t_store.find({color:{$all:["土豪金","玫瑰金"]}});
> db.t_store.find({'color.1':"土豪金"})
> db.t_store.find({color:{$size:3}});
→查询数组内嵌文档
db.t_user.insert( [
{ name: "张小三",age:20,friends:[{name:"李晓思",age:25},{name:"王小五",age:22}]},
{ name: "李晓思",age:25,friends:[{name:"张小三",age:20},{name:"温晓琪",age:30}]}
]);
> db.t_user.find({'friends.0.name':'李晓思'})
> db.t_user.find({"friends.age":{$gt:25}})
> db.t_user.find({"friends":{$elemMatch:{age:{$gt:25}}}})
→Project Fields
> db.t_user.find({},{name:true,'friends':true})
> db.t_user.find({},{name:true,'friends.name':true})
→查询null和空值
db.t_null.insert([
{_id:1,item:null},
{_id:2}
])
> db.t_null.find({item:null});
{ "_id" : 1, "item" : null }
{ "_id" : 2 }
> db.t_null.find( { item : { $type: 10 } } )
{ "_id" : 1, "item" : null }
> db.t_null.find( { item : {$exists: false } } )
{ "_id" : 2 }
> db.t_null.find( { item : {$exists:true} } )
{ "_id" : 1, "item" : null }
====【操作符】====
比较操作符:$eq、$gt、$gte、$lt、$lte、$ne、$in、$nin
逻辑操作符: $or、$and、$not、$nor
元素操作符:$exists、$type
求值搜索符:$mod、$regex、$where
数组查询符: $all、$elemMatch、$size
db.t_user.insert( [
{ name: "张小三",age:20,friends:[{name:"李晓思",age:25},{name:"王小五",age:22}]},
{ name: "李晓思",age:25,friends:[{name:"张小三",age:20},{name:"温晓琪",age:30}]}
]);
1.查询年龄大于20~30之间且薪资小于10000
db.t_user.find({$and:[{age:{$gt:20,$lt:30}},{salary:{$gt:10000}}]})
2.查询年龄是奇数的用户:
db.t_user.find({age:{$mod:[1,1]}})
3.使用where实现数据的age[10,30]区间数据
db.t_user.find({$where:"return this.age>10 && this.age<30"})
4.查询姓张的用户
db.t_user.find({name:{$regex:"^张"}});
5.查询朋友中有年龄大于25岁的
db.t_user.find({"friends":{$elemMatch:{age:{$gt:25}}}})
====【分页&排序 skip、limit、sort排序】====
db.t_user.find().skip(1).limit(1)
db.t_user.find().skip(0).limit(10).sort({age:1});
====【聚合函数】====
db.t_user.insert([
{name:"张三",sex:true,class:"软开1班",age:28,salary:18000},
{name:"李四",sex:true,class:"软开2班",age:25,salary:15000},
{name:"王五",sex:false,class:"软开1班",age:35,salary:10000},
{name:"赵六",sex:true,class:"软开2班",age:20,salary:15000}
]);
1.统计班级人员的平均薪资
db.t_user.aggregate([{$group:{_id:'$class',avgSalary:{$avg:'$salary'}}}]);
2.分析班级中薪资大于10000学生的平均年龄
db.t_user.aggregate([{$match:{salary:{$gt:10000}}},{$group:{_id:'$class',avgAge:{$avg:'$age'}}}]);
3.求每一个班中薪资最高薪资
db.t_user.aggregate([{$group:{_id:'$class',maxSalary:{$max:'$salary'}}}]);
4.求每一个班中薪资最低薪资
db.t_user.aggregate([{$group:{_id:'$class',minSalary:{$min:'$salary'}}}]);
5.求每一个班中薪资最低薪资班级降序
db.t_user.aggregate([{$group:{_id:'$class',minSalary:{$min:'$salary'}}},{$sort:{_id:-1}}]);
6.按照班级平均薪资降序
db.t_user.aggregate([{$group:{_id:'$class',avgSalary:{$avg:'$salary'}}},{$sort:{avgSalary:-1}}]);
7.求班级平均薪资最高的班级信息
db.t_user.aggregate([{$group:{_id:'$class',avgSalary:{$avg:'$salary'}}},{$sort:{avgSalary:1}},{$limit:1},{$skip:1}]);
MapReduce 统计参考:https://docs.mongodb.com/manual/aggregation/#map-reduce
====【MongoDB 索引】=====
1.单Field索引: db.records.createIndex( { score: 1 } )
2.复合索引 : db.collection.createIndex({ score: 1,name:-1 } )
3.唯一索引 : db.members.createIndex({"user_id":1},{unique:true})
4.稀疏索引 : db.t_user.createIndex({name:1},{sparse:true});
5.部分索引 :
db.t_user.createIndex({name:1},
{partialFilterExpression:{
age:{$gt:18}
},
unique:true
})
删除索引
db.t_user.dropIndex({name:1});
db.t_user.dropIndexes();
db.t_user.explain("executionStats");
====【Java API MongoDB Driver】=====
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.4.3</version>
</dependency>

参考:http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.6.3</version>
</dependency>


package testmongo;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestClient {
    MongoClient mongoClient=null;

    @Before
    public void testbefore(){
        mongoClient = new MongoClient("192.168.18.135");
    }


    @Test
    public void testinsertOne(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        Document document = new Document("name","mongodb").append("type","database")
                                .append("count",1).append("versions", Arrays.asList("v3.2","v3.6","v6.6"))
                                .append("info",new Document("x",333).append("y",666));
        collection.insertOne(document);
    }
    @Test
    public void testInsertMany(){
        List<Document> documents = new ArrayList<Document>();
        for (int i=0;i<10;i++) {
            documents.add(new Document("i",i));
        }
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        collection.insertMany(documents);
    }
    @Test
    public void testupdateOne(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        UpdateResult updateResult = collection.updateOne(new Document("i", 2), new Document("$set", new Document("i", 22)));
        System.out.println(updateResult);
    }

    @Test
    public void testupdateMany(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        UpdateResult updateResult = collection.updateMany(new Document("i", 3), new Document("$set", new Document("bbb", 666)));
        System.out.println(updateResult);
    }

    @Test
    public void testupdeleteOne(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        DeleteResult i = collection.deleteOne(new Document("i", 0));
        System.out.println(i);
    }

    @Test
    public void testupdeleteMany(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        DeleteResult i = collection.deleteMany(new Document("name", "zz"));
        System.out.println(i);
    }

    @Test
    public void testupdeleteOfind(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        FindIterable<Document> documents = collection.find();
        for (Document document : documents) {
            System.out.println(document);
        }
    }

    @Test
    public void testupdeleteOfindOne(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        FindIterable<Document> documents = collection.find(new Document("name", "郝帅"));
        for (Document document : documents) {
            System.out.println(document);
        }
    }

    @Test
    public void testupdeleteOfindBy$in(){
        MongoDatabase database = mongoClient.getDatabase("test1");
        MongoCollection<Document> collection = database.getCollection("user");
        FindIterable<Document> documents = collection.find(new Document("i",new Document("$in",Arrays.asList(1,2,3,4,5))));
        for (Document document : documents) {
            System.out.println(document);
        }
    }










    @After
    public void testafter(){
        mongoClient.close();
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值