MongoDB

MongoDB数据存储的格式是文档--json格式的文档
三要素:数据库,集合,文档
服务端mongod  客户端mongo

show dbs
use 数据库
db
db.createCollection('stu')
show collections;
db.stu.drop();  show collections; show dbs;





添加文档数据库和集合不存在就会自动创建出来
添加数据之前可以不创建集合只要添加数据了集合会自动创建出来
插入
db

db.stu.insert({name:'gj',gender:1});
db.stu.find();
db.stu.insert({name:'hr',hometown:'桃花岛'});
db.stu.find()
db.stu.insert({_id:'201711',name:'dx'});
db.stu.find();

查询find()

更新
db.stu.update({gender:1},{name:'gj123'})-将整个文档发生了变化,而且只修改满足条件第一个文档
db.stu.find()


指定属性更改 $set

db.stu.update({name:'hr'},{$set:{name:'hr123'}})只修改满足条件的第一个文档


修改多条multi:true--多文档更新,对所有文档的跟新
{}第一个参数{}表示所有数据
db.stu.update({},{$set:{gender:1}})没有gender属性就添加只修改第一个文档,第一个文档有就修改没有就添加

db.stu.update({gender:1},{$set:{gender:1}},{multi:true})

save命令 id存在就修改不存在就增加

删除
db.stu.remove({})--删除文档  集合虽然为空但是还是存在的

创建集合指定大小
capped:true大小达到指定值会将最早的数据覆盖掉
指定大小配合capped:true使用




数据查询
基本查询

db.stu.find({age:{$gte:18}})



db.stu.find({$or:[
    {age:{$gte:18}},
    {gender:false}

]})

范围运算符
db.stu.find({age:{$in:[18,28]}})


正则表达式 js中的正则
db.stu.find({name:/^黄/})

自定义函数
js函数必须返回一个true或false



Limit
db.stu.find().skip(3).limit(2)
skip和limit不分先后顺序

投影
db.stu.find({},{})
在结果中显示哪些属性--第二个参数
第一个参数条件

排序



统计
db.stu.count()

消除重复

db.stu.distinct({'hometown',{age:{$gt:18}}})



聚合
$project 投影 结果集中要哪些结果

在调用aggregate不能掉之前哪些方法
要做查询哪些方法就不能用聚合的方法

一个做查询一个做聚合

常用表达式
$push将分组后某个属性的值放到一个数组中返回--不是有差异的数据
aggregate方法接受的是一个数组,数组里接受的是json
$sum:字段  --针对某个字段求和
$sum:1  统计个数


$unwind  将$push结果数组拆分成一行一行返回
将文档中的数组值拆分成多行


聚合采用管道的方式




==========================================
db.dropDatabase() ---删除当前数据库

将集合中的数据全部删除了集合和数据库还存在
但是如果将数据库中的集合全部删除了那数据库就不存在了show dbs看不到了
db.stu.insert({name:'gj',gender:1})
db.stu.insert({name:'hr',hometown:'桃花岛'})
db.stu.insert({_id:20170101,gender:1})
db.stu.insert({name:'hr',gender:1})
db.stu.update({gender:1},{name:'wg'})
db.stu.update({name:'hr'},{$set:{name:'hr1111'}})
db.stu.update({},{$set:{gender:2}})-条件为所有,没有gender这个字段会新增一个
db.stu.remove({})
db.stu.drop()
db.stu.find()
show collections
db.createCollection('sub',{capped:true,size:10})-测试:增加5条数据,再增加就会把最旧的数据进行覆盖



db.stu.drop()
db.stu.insert({name:'郭靖',hometown:'蒙古',age:20,gender:true})
db.stu.insert({name:'黄蓉',hometown:'桃花岛',age:18,gender:false})
db.stu.insert({name:'华筝',hometown:'蒙古',age:18,gender:false})
db.stu.insert({name:'黄药师',hometown:'桃花岛',age:40,gender:true})
db.stu.insert({name:'段誉',hometown:'大理',age:16,gender:true})
db.stu.insert({name:'段王爷',hometown:'大理',age:45,gender:true})
show collections
db.stu.find()
db.stu.find({name:'郭靖'})
db.stu.find({age:{$gte:30}})
db.stu.find({age:{$gte:18},name:'郭靖'})
db.stu.find({$or:[
        {age:{$gte:18}},
        {gender:false}
    ]})
db.stu.find({age:{$in:[18,45]}})
db.stu.find({age:{$nin:[18,45]}})
db.stu.find({$or:[{age:18},{age:45}]})

db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}})
db.stu.find({$where:function(){return this.age>30;}})
db.stu.find({age:{$gt:30}})

db.stu.find().skip(3).limit(1)

投影:
#对于普通字段显示设置为1即可,不设置即为不显示,不显示不能设置0否则报错
对于_id字段不设置是默认显示的所以如果不想显示需要设置为0
db.stu.find({},{name:1,gender:1})
db.stu.find({},{_id:0,name:1,gender:1})

db.stu.find({},{_id:0,name:1,age:1}).sort({age:-1,name:1}) -1降序 1升序

统计
db.stu.count()
db.stu.count({gender:false})
去重
db.stu.distinct('hometown',{age:{$gt:18}})

db.stu.aggregate([
    {$group:{_id:'$gender',counter:{$sum:'$age'}}}
])

db.stu.aggregate([
    {$group:{_id:'$gender',name:{$push:'$name'}}}
])

db.stu.aggregate([
        {$group:{_id:'$gender',name:{$push:'$$ROOT'}}}
])


db.stu.aggregate([
    {$match:{age:{$gt:20}}},
    {$group:{_id:'$gender',count:{$sum:1}}}

])



db.stu.aggregate([
    {$group:{_id:'$gender',count:{$sum:1}}},
    {$project:{_id:0,count:1}}
    
])



db.stu.aggregate([
    {$group:{_id:'$gender',count:{$sum:1}}},
    {$project:{_id:0,count:1}},
    {$sort:{count:-1}}

])


db.stu.aggregate([
    {$group:{_id:'$gender',count:{$sum:1}}},
    {$project:{_id:0,count:1}},
    {$sort:{count:-1}},
    {$skip:1},
    {$limit:1}

])


db.t2.insert({
        _id:1,item:'t_shirt',size:['S','M','L']
    })
    
db.t2.find()



db.t2.aggregate([
    {$unwind:'$size'}

])




新建t3集合
db.t3.insert([
{ "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] },
{ "_id" : 2, "item" : "b", "size" : [ ] },
{ "_id" : 3, "item" : "c", "size": "M" },
{ "_id" : 4, "item" : "d" },
{ "_id" : 5, "item" : "e", "size" : null }
])

db.t3.find()


db.t3.aggregate([
    {$unwind:'$size'}
])


db.t3.aggregate([
    {$unwind:{
        path:'$size',
        preserveNullAndEmptyArrays:true
        }}
    
])


find({$where:function(){return this.age>=18 && this.age<=45;}})

db.stu.aggregate([
    {$group:{_id:'$gender',counter:{$sum:'$age'}}}
])

在文档中结构中必须要有_id








原文地址:https://www.cnblogs.com/wgDream/p/6883615.html