mogodb基本用法

选取或者创建数据库

/**
创建数据库 不存在自动创建
只有当向数据库插入数据时,才会真正的创建数据库
**/
use db_name;

主 、从节点

-- 当前语句可以判断当前登录的主机是否是主节点
db.isMaster()

查看数据库

-- 查看数据库中的所有表
show dbs
db: MongoDB 全局变量,代表当前正在使用的数据库对象。当用户不显示的使用 use xxx 时,则表示 db为 test

数据库的备份与恢复

  • 备份
mongodump -h dbhost -d db_name -o target_dir
  • 恢复
-- 将 备份文件恢复到 指定主机的 db_name 数据库中
mongorestore -h host:port -d db_name back_file

删除数据库

-- 删除数据库(当前使用的数据库)
db.dropDatabase()
-- 查看数据库
show dbs

创建集合

// 创建集合 和 关系型数据库中的表类似
db.createCollection("clss1")
// 查看集合
show collections
show tables
// 当插入数据时,集合不存在会自动创建对应的集合
db.clss1.insertOne({
"name": "yp",
"age": 30
})

删除集合

-- 其中 col_name为集合的名字
db.col_name.drop()

集合重命名

-- 将 集合 clss1重命名为 clss0
db.clss1.renameCollection("clss0")

文档

  • 类似与关系型数据库的的 记录(行) 数据的组织形式(k,v)形式和Python的字典类似, key: 文档的域 ;
  • 必须是 utf-8格式的字符串 不能有 \0 键 同一个文档中 key不能重复 !!!
  • 文档中的 键是有序的 且区分大小写
  • value: 存储的数据 mongo支持的数据类型。

mongodb 支持的数据类型

整形    整数 1
布尔类型  true false
浮点型   3.141
Array    数组 [1,2,3]
Timestamp 时间类型
Date 时间日期
Object 内部文档
Null   空值 null
String 字符串
Symbol 特殊字符串
Binary data 二进制字符串
code 代码
regex  正则表达式
objectId ObjectId

集合中文档的特点

  • 文档中的域的个数不一定一样
  • 集合中的文档不一定有相同的域

插入数据 利用 insert_xxx

  • 插入单个文档
db.stu.insertOne({
              name: 'yx',
              age: 18
              })
-- 查看内容
db.stu.find()
  • 插入多个文档
  -- 一次插入多条数据 封装成为一个数组
db.stu.insertMany(
[   {name: "zs",age:23},
    {name: "lisi",age:24}
])
-- 查看内容
db.stu.find()

利用save 命令插入

在不使用 _id 的情况下 和 insertOne insertMany 功能完全一样;而加 id字段时,当 id存在时,会替换原有文档,而 insertOne 或者 insertMany 会报错。

获取集合对象 类似MySQL中表的概念

db.getCollection('stu')
db.collect_name   -- collect_name 表示集合的名称

筛选数据 query

基本语法 query(query, fields) 其中 query 查询条件; fields 结果集合中需要展示的字段。参数都是以 (k,v) 的格式。

  • 查询满足条件的所有记录
-- 年龄 22
db.stu.find(
{age: 22}
)
-- id:0 表示不显示 _id 字段
db.stu.find(
{age: 22},{_id:0}
)
-- 指定显示 name age 字段 _id 只有明确设置为0才不显示
db.stu.find(
{age: 22},{name:1,age:1,_id:0}
)
-- 没有第二个参数 表示 显示所有文档

操作符(以$开头特殊意义的字符类似mysql中 关键词)

  • 比较操作符
/*
 使用 $符号注明一个特殊意义的字符。表达某个特定的含义
 比较操作符
 $eq = 
 $lt  < age: {$lt: 22} 表示小于 22
 $lte <= 小于等于 -- less  equal than 
 $gt >   age: {&gt: 22}
 $gte >= 
 $in 相当于 in  age: {$in: [18,22]} 精确值匹配
 $nin  相当于 not in   age: {$nin: [18,22]}
 $ne 不等于  age: {$ne:22}
*/
db.stu.find(
{
age: {$eq: 22}
}
)
-- 等价于
db.stu.find({
            age: 22
            })
  • 逻辑操作符
/*
 $and 逻辑操作符 默认逗号就表示 and 关系
 $or 逻辑或
 $nor 既不也不
*/
-- 筛选 年龄在 18 ~ 22
age:{
$gte: 18, $lte:22
}
-- 筛选 年龄 在 18 ~ 22 
{$and:
[{age:{$gte:18}},{age:{$lte:22}}]
}
-- 筛选 年龄 小于18 或者 大于 22
{age:{$not:{$gte:8,$lte:10}}}
-- 筛选name 为 xxx 或者 age 大于 18的记录
{$or: [{name:'yx'},{age:{$gt:18}}]}
-- 筛选 年龄为 yx  或者 age != 22
{$or: [{name:'yx'},{age:{$not:{$eq:22}}}]}
  • 数组操作
/*
$size 数组的长度
$all 满足多个条件 默认只要一个匹配就行
-- 控制显示域
$slice: 2  显示数组中的前两项
-- 显示数组中指定的项目 索引从1开始
{grade:{$slice:[1,2]}}
*/
  • 其它操作
/*
$exists  {$exists:true} 某个域存在
{$exists:false} 某个域不存在
-- 数据类型查找
$type:1 当字段为数组时候 表示数组中的元素
*/
-- 查找性别存在的文档
db.stu.find({sex:{$exists:true}}
)
-- 性别不存在
db.stu.find({sex: {$not:{$exists:true}}}
)

db.stu.find({sex:{$exists:false}})
-- 查找年龄为偶数的文档
db.stu.find({age:{$mod:[2,0]}})
  • 对结果进一步处理
/*
--显示前几条
limit(2)
skip(n)跳过前n条显示后面的记录
count() 记录的数目
sort({field:1/-1}) 1升序 -1 降序
*/
-- 按照 年龄降序
db.stu.find({},{_id:0}).sort({age:-1})
-- 按照年龄升序 姓名 升序
sort({age:-1,name:1})
  • 删除文档
/*
delete 删除多条
db.stu.deleteMany({age:24})
-- 删除一条
db.stu.deleteOne({age:22})
-- 删除所有的文档
db.stu.deleteMany({})
db.stu.remove({})
*/

案例

use grade;
db.grade.insertMany([
{name: 'A001',age:10,sex:'m',habby:['basketball','sing','running']},
{name: 'A002',age:6,sex:'w',habby:['dance','computer']},
{name: 'B002',age:13,sex:'w',habby:['dance','draw','football']},
{name: 'B003',age:3,sex:'w',habby:['running']}
])

db.grade.insertOne({
name:'C005',age:8, sex:'w',habby:['draw','computer']
})
// 查询年龄大于10
db.grade.find({age:{$gt:10}})
// 查询年龄在8-11岁
db.grade.find({age:{$gte:8,$lte:11}})
db.grade.find({age:9,sex:'m'})
// 小于7岁或者大于11
db.grade.find({$or:[{age:{$lt:7}},{age:{$gt:11}}]})
// 年龄8岁或者11岁
db.grade.find({age:{$in:[8,11]}})
// 兴趣爱好有两项
db.grade.find({habby:{$size:2}})
// 爱好计算机的同学
db.grade.find({habby:'computer'})
// 喜欢跳舞 又喜欢画画
db.grade.find({habby:{$all:['draw','dance']}})
// 兴趣爱好2项学生数
db.grade.find({habby:{$size:3}}).count()
// 找到年龄第二大学生
db.grade.find().sort({age:-1}).skip(1).limit(1)
// 兴趣爱好的范围
db.grade.distinct('habby')
// 年龄最小的三个人
db.grade.find({}).sort({age:1}).limit(3)
// 年龄小于6岁 或者大于12
db.grade.find({
 $nor:[{age:{$lt:6}},{age:{$gt:12}}]
})

更新操作

/**
 更新操作符
 $set 添加或者更新 域
 $unset 删除 域
 -- 删除性别这个字段
 db.xxx.udpate({name:xxx},{$unset:{sex:''}})
 $setOnInsert 添加时对应的字段作为域
 -- 增加或者减少
 $inc:{age:1}
 $mul 所有的都乘法 xxx
 -- 是的给定字段的最大值为设定为给定的值
 $min:{field:v}
 将小于给定字段的值修改为给定值
 $max:{field:v}
 - 针对数组类型的域操作
 $push:{field:v} !!!向数组中添加(注意字段的类型)
 -- 向数组中添加多项
 $putAll:{filed:[x1,x2,..]}
 -- 删除一项
 $pull:{filed:v}
 -- 数组删除多项
 $pullAll
 -- 类似循环 
 $each:[x1,x2]
 -- 插入指定位置
 {$push:{age:{$each:[1,2],$position:1}}
 $each $sort 联合使用
 $pop 弹出元素 删除
 $pop:{field:-1} -- 弹出尾部元素
 $pop:{field:-1} -- 弹出头部元素
 $addToSet 不存在才添加 针对数组类型的域 或者字典类型
 $mergeObjects 通常和$group 结合使用, 合并字典
*/
-- 所有的年龄都加1
db.grade.updateMany({},{$inc:{age:1}})
-- 将大于等于12的修改为12 小于的不改变
db.grade.updateMany({},{$min:{age:12}})
db.grade.updateOne({name:'A001'},{$push:{habby:{$each:[],$sort:-1}}})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容