MongoDB
Posted 晴空半岛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于MongoDB的主要内容,如果未能解决你的问题,请参考以下文章