mongoDB
MongoDB介绍
概念
面向文档的数据库,底层用C++编写,是一个开源的数据库系统
将数据存储为文档、数据结构为:键值对(key value){name:‘小红’}
储存模式是json类似是json的bson的格式
主要特点
提供一个面向文档的存储方式,操作起来比较简单容易
支持丰富的查询表达式,可轻易地查询文档内嵌和数组、对象
支持各种的编程语言(ruby/python/jave/c++/php/c#{chap})
安装起来比较简单
数据库文档
与mysql不同,mongodb不需要固定的表结构
非关系型数据库中的数据保存在文档内,采用Bson类型的数据来进行存储
每个数据库下都可以有多个集合,每个集合下有多个文档
数据库存储的结构
每个文档都有键值对(key value)来储存
每个文档可以存储多个键值对,ID唯一
每个数据库下可以有多个集合,每个集合下有多个文档
mongodb语言(非sql语言)
是由国际标准委员会定义的,但不同的数据库采用的语言会有不同的差异
区分大小写,语句不用分好结尾,语句可以写一行,也可以写多行,驼峰命名的相连单词第一个单词大写(首单词不大写)
数据类型
arrays ID
Object ID
自生成的_id()每个文档都有一个id标识
0-8字是时间戳
9-14字是机器标识;表示mongodb所在的机器不同
15-18字是进程标识,表示相同机器的不同mongodb的进程
19-24字节是计数器
例子
{_id:1,name:'西门大官人',age:38,house:['beijing','shanghai','sjhenzhen']}
单个值
{_id:2,name:'韦小宝',age:18,wifi{beijing:'小红',shenzhen:'小绿'}}
键值对
创建集合的相关参数
capped
设置为true,则创建固定集合,达到最大值时会覆盖最早的文档,默认false,固定集合内的文档限制较多
autoindexid
设置为true时,自动在_id字段创建索引,默认为false
size
指定固定集合中包含文档的最大数值
数据库
创建数据库
创建数据库时,如果里边没有集合,mongodb只会将数据库临时放在内存中,只有当里边有了集合,才会保存下来
使用use时,如果数据库不存在,则创建新的数据库,如果已有数据库,则切换至已有数据库
概要
use 库名
有库直接使用
use new库名
没有库创建新库
db.creatCollection('集合名')
插入insert
创建集合
use 库名
db.creatCollecction('集合名')
插入insert
插入单条
db.库名.insert([
{_id:1,name:"艾斯",age:99},
{_id:2,name:"杰克",age:100}
])
插入多条
db.库名.insert([{_id:6,name:"大娃",age:100},{_id:7,name:"二娃",age:100},{_id:8,name:"三娃",age:100},{_id:9,name:"四娃",age:100}])
插入一条带array的文档
db.库名.insert({_id:4,name:"聪哥",age:60,house:["beijing","tianjin","mosike","wukelan"]}) (单个值)
插入一条带object的文档
db.库名.insert({_id:5,name:"韦小宝",age:18,wife:{"beijing":"双儿","shenzhen":"建宁公主","yunnan":"龙儿"}}) (键值对)
修改/更新文档update
使用:update()
query:更新的条件,类似mysql的where,多个条件可以逗号并列
update:更新的内容
options:multi参数:设置为true时表示多条文档更新,false代表符合条件的第一条文档更新,不写multi,代表默认为false。
更新单条文档
update参数内的文档直接覆盖原来的文档,且_id不变
把name为二娃的文档改为年龄是101的文档
db.库名.update({name:"二娃"},{age:101})
更新多条文档
把age为100岁的名字改为五娃
db.库名.update({age:100},{$set:{name:"五娃"}},{multi:true})
修改器$set/$unset
$set: 用来指定一个字段,如果这个字段不存在,则创建它。
$set增加不存在的字段
db.库名.update({age:100},{$set:{address:"葫芦山"}},{multi:true})
$set增加年龄为100岁的文档内的address字段
db.库名.update({age:100},{$set:{address:"葫芦山"}})
指定多条件满足的文档更新。
db.库名.update({name:"五娃",age:99},{$set:{address:"葫芦山"}})
$unset:将指定的字段删除。
db.库名.update({age:100},{$unset:{address:"葫芦山"}},{multi:true})
db.teacher.update({age:100},{$unset:{address:1}})
保存save()
save()方法保存文档时,看是否指定_id,如果指定了_id且之前文档有相同的_id则直接覆盖,如果没有指定_id,或者_id没重复,则会新增一条文档
指定id且不重复
db.库名.save({_id:12,name:"钢铁侠",age:40,like:["洗脚","开车","模特"]})
不指定id
db.库名.save({name:"钢铁侠",age:40,like:["音乐","机车","喷漆"]})
指定id且id重复直接覆盖
db.库名.save({_id:1,name:"钢铁侠",age:40,like:["音乐","机车","买房"]})
删除remove
删除指定单条件的文档,如果多个文档都满足则全部删除
db.库名.remove({name:"钢铁侠"})
删除指定多条件满足的文档。
db.库名.remove({name:"五娃",age:99})
删除全部文档
db.库名.remove({})
查询find()
查询集合内所有的文档
db.库名.find()
查询集合内指定字段的值
单字段查询
db.库名.find({},{name:true})
多字段查询
db.库名.find({},{name:true,age:true})
条件查询
运算符$gt/$lt/$gte/$lte/$ne
大于:$gt
查询年龄大于30岁的文档
db.库名.find({age:{$gt:30}})
小于:$lt
查询年龄小于10岁的文档
db.库名.find({age:{$lt:10}})
大于等于:$gte
查询年龄大于等于30岁的文档
db.库名.find({age:{$gte:30}})
小于等于:$lte
查询年龄小于等于10岁的文档
db.库名.find({age:{$lte:10}})
不等于:$ne
查询年龄不等于10岁的文档
db.库名.find({age:{$ne:10}})
返回查询结果的前3条数据
db.库名.find().limit(3)
多条件查询
and条件查询
db.库名.find({age:5,name:'小灰灰'})
or条件查询
db.库名.find({$or:[{age:5},{address:'青青草原'}]})
升降序排列
升序:1
db.库名.find().sort({age:1})
降序:-1
db.库名.find().sort({age:-1})
linit对升序降序的排序
查询年龄最大的文档
db.shuai.find().sort({age:-1}).limit(1)
查询结果的统计
db.库名.find().count()
返回指定行数
查询年龄小于等于30岁的文档
db.库名.find({age:{$lt:30}})
查询年龄年龄大于20岁,不在青青草原的数量
db.库名.find({age:{$lt:20}.})
模糊查询
查询name中包含羊的文档
db.库名.find({name:/羊/})
查询name中以美开头的文档
db.库名.find({name:/^美/})
去重distinct
去重,字段名必须加引号
db.库名.distinct('address')
单字段排除查询
db.库名.find({},{name:false})
多字段排除查询
db.库名.find({},{name:false,age:false})
mongodb key value 快速取值 mongodb是key value
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 一个map相同的key累加value
java 一个map相同的key累加value
java Java System