Mongodb基本操作

mongodb介绍

1.什么是mongodb?

  • mongodb 是由c++语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负荷的情况下,添加更多的节点,可以保证服务的性能
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

三元素: 数据库、集合、文档

数据库是一个集合的物理容器
集合就是关系数据库中的表
文档对应着关系数据库中的行
1). 文档,就是一个对象,由键值对构成,是json的扩展Bson形式 {'name':'guojing','gender':'男’}

2). 集合:类似于关系数据库中的表,储存多个文档,结构不固定,如可以存储如下文档在一个集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shuihuzhuan','heros':'108’}

3). 一个mongodb中可以建立多个数据库

4). 数据库:是一个集合的物理容器,一个数据库中可以包含多个集合

5). 集合:集合中可以存储多个文档
6). 文档:就是一个对象,由键值对构成,是json的扩展Bson(可以理解为在JSON的基础上添加了一些json中没有的数据类型)形式。 需要注意的是:

2.mongodb启动

1.启动

sudo service mongodb start
2.停止
sudo service mongodb stop
3.重置
sudo service mongdb restop
4.退出链接
exit/ctrl+c

3.数据库、集合相关操作

数据库基本命令

1.查看当前数据库

db

  1. 列出所有数据库

show dbs
3.切换数据库,如果不存在,则指向但不创建,直到插入数据或者创建集合时数据库才被创建
use 数据库名
4.查看当前数据库信息
db.stats()
5.删除数据库
db.dropDatabase()

集合的相关操作

1.创建集合

db.createCollection(name,options)

name是要创建的集合的名称
options是一个文档,用于指定集合的配置 选项​​参数是可选的,所以只需要到指定的集合名称

options参数:

capped 布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。

autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。

size 数值 (可选)为固定集合指定一个最大值.当文档达到上限时,会将之前的数据覆盖,单位为字节。如果 capped 为 true,也需要指定该字段。

max 数值 (可选)指定固定集合中包含文档的最大数量。

2.查看数据库集合

show collections

3.删除集合
db.集合名称.drop()

3.数据的增删改查

1.插入文档

  • 单条插入

db.集合名称.insert({文档})

查询全部文档

db.集合名称.find()

更新文档

  1. update() 方法用于更新已存在的文档

db.集合名称.update()

参数:

  • query : update的查询条件,类似sql update查询内where后面的。

  • update : update的对象和一些更新的操作符(如,inc...)等,也可以 理解为sql update查询内set后面的

  • upsert : 可选,这个参数的意思是,如果不存在update 的记录,是否插入objNew,true为插入,默认是false,不插 入。

  • multi : 可选,mongodb 默认是false,只更新找到的第 一条记录,如果这个参数为true,就把按条件查出来多条记录 全部更新。

全文档更新


db.stu.update(
    {name:'赵文竹'},
    {name:'哈哈哈'}
)

指定属性更新,通过操作符$se


db.stu.update(
    {name:'赵文竹'},
    {
        $set:{name:'啦啦啦'}
    }
)

修改多条匹配到的数据

db.stu.update(
    {name:'赵文竹'},
    {
        $set:{name:'啦啦啦'}
    },
    {multi:true}
)

2.save() 方法通过传入的文档来替换已有文档,如果文档的_id已经存在则修改,不存在则添加

db.stu.update(
    {name:'赵文竹'},
    {
        $set:{name:'啦啦啦'}
    }
)

pretty()

该函数,讲数据以格式化的方法展示

db.集合名称.find().pretty()

删除文档

db.集合名称.remove(document)

remove()方法基本格式:

db.collection.remove(
<query>,
{justOne: <boolean>,}
)

参数说明
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。

基本的数据查询

查全部

db.集合名称.find({条件文档})

查一个

db.集合名称.findOne({条件文档})

比较运算符

等于,默认是等于判断,没有运算符
小于lt 小于或等于lte
大于gt 大于或等于gte
不等于$ne

例:查询年龄大于或等于18的学生

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

逻辑运算符

1.默认是逻辑与的关系

2.逻辑或使用$or

db.stu.find(
    {
        $or:[
            {age:{$gt:18}},
            {gender:1}
        ]
    }
)

3.and和or一起使用
例5:查询年龄大于18或性别为0的学生,并且学生的姓名为gj

db.stu.find(
    {
        $or:[
            {age:{$gte:18}},
            {gender:1}
        ],
        name:'gj'
    }
)

范围运算符

$in $nin判断是否在某个范围内

db.stu.find(
    {
        age:{$in:[18,28]}
    }
)

支持正则表达式

使用//或者$regex编写正则表达式

db.stu.find(
    {name:/^李/}
)
db.stu.find(
    {
        name:{$regex:'^李'}
    }
)

$type

获取某一种类型的数据,使用$type

db.col.find(
    {
        "title" : {$type : 'string'}
    }
)

limit 与Skip方法

limit() 方法 读取指定数量的数据记录

db.集合名称.find().limit(num)

Skip() 方法 使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

db.集合名称.find().skip(num)

limit() 方法、Skip() 方法 同时使用,不分先后顺序 表示跳过多少条,返回多少条

sort() 方法排序

** sort() **方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

升序
db.集合名称.find().sort({排序字段:1})
降序
db.集合名称.find().sort({排序字段:-1})

注意: skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

distinct() 去重

db.集合名称.distinct('去重字段',{条件})

例:查找年龄大于20的姓名(去重)
db.集合名称.distinct('name',{age:{$gt:20}})

project投影(可以指定想要返回的字段)

在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

参数为字段与值,值为1表示显示,值为0不显示

db.集合名称.find({},{字段名称:0,...})

count() 统计个数

db.集合名称.count({条件})

表示返回集合中的文档数量

db.集合名称.find().count()
db.集合名称.find({条件}).count()

在count()函数中添加条件
例:统计年龄大于20的男生人数

db.集合名称.count(
    {
        age:{$gt:20},
        gender:1
    }
)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容