创建数据库

use + 数据库名称

use会创建一个数据库,如果这个数据库存在,那么返回这个数据库

示例
创建一个数据库skdb

use skdb

使用db命令查看当前选定的数据库

db

使用show dbs命令来检查数据库列表

show dbs

插入新的文档到集合中

db.student.insert{
stuid : 1,
stuname : "xxx"
}

删除数据库

db.dropDatabase

范例

sue sdkb
db.dropDatabase()

插入文档

若不存在,插入新文档时会自动创建一个新的集合,再插入.

db.collection.insertOne():向指定的集合插入一条数据
db.collection.insertMany():向指定的集合中插入多条数据
db.users.insertOne(
{name:"sue",age:22,status:"xxx"
}
)

向users插入多条文档

db.users.insertMany(
[{
name:"zzxb",
age:18,
status:"xxx"
},
{
name:"ilyj",
age:38,
status:"stop"
}
]
)

更新文档

db.collection.update(
<query>,
<update>,
{upsert:<boolean>,multi:<boolean>,writeConcern:<documnet>
}
)

参数说明:

  • query:update的查询条件,类似sql update查询内where后面的
  • update:update的对象和一些更新的操作符号
  • upsert:可选 若不存在update的记录,是否插入objNew,true为插入,默认为false,不插入
  • multi:可选,只更新找到的第一条记录,true:把按条件查出来的多条记录全部更新
  • writeConcern:可选 抛出异常的级别

3.2版本开始 MongoDB提供以下更新集合文档的方法

db.collention.updateOne()
db.collection.updateMany()

范例
将name为zzxb的文档,更新年龄为40

db.user.update(
{"name":"zzxb"},
{$set:{"age":40}}
)

将年龄小于30的文档,更新状态为stop

db.users.update(
{"age":{$lt:30},
{$set:{"status":"stop"}}
}
)

大于小于

  • lt : 小于
  • gt: 大于
  • lte : 小于等于
  • gte : 大于等于
  • ne: 不等于

save语法
save()方法通过传入的文档来替换已有的文档

db.collection.save(
<document>,
{
writeConcern:<document>
}
)
  • document:文档数据
  • writeConcern:可选的,抛出异常的级别

替换id为5a67ea03fd6b999d262bae2c的文文档内容

db.users.save({_id:ObjectId("5a67..."),name:"myzzxb",age:28,status:"starting"
})

修改器
通常文档只会有一部分要更细,使用原子性的更新,指定文档的某些字段进行更新
更新修改器是钟特殊的键.用来指定复杂的更新操作:修改,增加 删除,还可能是操作数据或内嵌文档

$inc:修改器⽤用来增加已有键的值,或者该键不存在那就创建⼀一个

新建集合

db.fangwencount.insert([{url:"www.163.com",pageviews:52},{url:"www.sina.com.cn",pageviews:52
} ]
)

使用$inc修改访问次数

 db.fangwencount.update({url:"www.sina.com.cn"},{$inc:{pageviews:2}})

$inc键的值必须为数

$set指定一个字段的值 如果不存在那么创建

db.students.insert({
name:"zzxb", age:19, sex:"男"
} )

添加学生爱好

db.sutdent.update(
{name:''zzxb''
},{$set:{aihao:"football"}
}
)

再添加一个爱好

db.student.update(
{name:"zzxb"
},
{$set:{aihao:"football","basletball"}
}
)

$unset可以删除字段
删除aihao的键值

bd.sutdent.update(
{name:"zzxb"
},
{$unset:{aihao:null}
}
)

数组修改器

数组是很有用的数据结构
可通过索引进行引用的列表
还可以作为数据集采用

添加元素
若数组存在
$push会向数组末尾添加一个元素

没有数组就创建一个新的数组

新增集合

db.blog.posts.insert({title:"mongdb操作⼿手册",content:"这是⼀一份mongdb操作⼿手册",addtime:new Date()}
)

$push添加元素

db.blog.post.updateOne(
{title:"mongodb操作手册"
},
{$push:{comment:{name:"ifeng",email:"xxx@163.com",addtime:new Date()}}
}
)

再次添加评论

db.blog.posts.updateOne(
{title:"mongo操作手册"
},
{$push:{comment:{name:"asdfj",email:"asdfa@163.com",addtime:new Date()}}
}
)


$each,可以通过一次 $push操作添加多个值
添加一个新的likes字段,用于记录点赞的人

db.blog.posts.updateOne(
{title:"mongodb操作手册"
},
{$push:{$each:[{name:"aa"},{name:"bb"},{name:"cc"}]}
}
)

$addToSet向数组添加不重复的元素
向like字段添加重复的元素

db.blog.posts.update(
{title:"mongo操作手册"
},{$addToSet:{likes:{name:"cc"}}
}
)

$pop $pull $pullAll
$pop指定数组删除的值 1:最后一个 -1:第一个

{$pop:{name:1}}

$pull删除被指定的值

{$pull:{name:"cc"}}

$pullAll:一次性删除多个指定的值

{$pullAll:{name:["js","JAVA"}}

使用占位符$操作嵌套文档

db.blogs.posts.update(
{_id:ObjectId("aksjdf;lka","comment.uname":"zzxb")},
{$set:{"comment.$.cotent":"ok"}}
)

注意:目前mongo不支持多个$

updataMany()

更新文档
findAndModify()能够在⼀个操作中返回匹配结果并且进⾏更新。

删除文档

语法1
db.collection.deleteOne(<filter>,{writeConcern: <document>,collation: <document>}
)语法2
db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>}
)参数说明:
filter : 条件
writeConcern :可选,抛出异常的级别。
collation:可选,排序⽅式⾃定义

删除ifeng用户

db.users.deleteOne(
{name:"ifeng"}
)

查询⽂档
插入模拟的数据

查询语法

db.collection.find(query,projection)参数说明:
query :可选,使⽤查询操作符指定查询条件
projection :可选,使⽤投影操作符指定返回的键。查询时返回⽂档中所有键值, 只需省略该
参数即可(默认省略)。

查询所有文档 并且显示所有字段

db.users.find()

查询全部文档 并且显示name字段

db.users.find({},{name:1})_id键默认返回 需要指定——id:0才会隐藏
db.userts.fidn({},{_id:0,name:1})

条件操作符

条件操作符⽤于⽐较两个表达式并从mongoDB集合中获取数据。
通过下表可以更好的理解 MongoDB 的条件操作符语句:

查询年龄等于30的用户

db.users.find(
{age:30}
)

查询年龄大于28的用户

db.users.find(
{age:{$ge:28}}
)

查询年龄大于等于30岁的用户

db.users.find(
{age:{$gte:30}}
)

And条件

语法:

db.collection.find({key1:value1,key2:valuse2})

查询年龄大于30 状态位ok的用户

db.users.find(
{age:{$gt:30},status:"ok"
}
)

OR条件

db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)

查询年龄大于30 或者状态时stop的用户

db.users.fidn(
{$or:[{age:{$gte:30}},{status:"stop"}]
}
)

查询出指定键

db.[集合名].find({条件},{键指定})
db.students.find({},{_id:0,stuname:1,city:1})

查询出年龄在25到27岁之间的学生

db.student.find({age:{$get25,$lte:27}})

包含 不包含($ in/$sin)
查询出所有(bu)是济南或者烟台的学生信息

db.mystu.find(
{city:{$(n)in:["jinan","yantia"]}
}
)

OR查询
查询所有高考成绩大约79或者Hadoop成绩大于80的学生信息

db.mystu.find(
$or:{{java:{$gt:79}},{hadoop:{$gt:80}}
}
)

把所有济南学生信息添加sex字段 并设置位man

db.mystu.updateMany(
{city:"jinan"},
{$set:{sex:"man"}}
)

模糊查询 正则表达式

//查询出名字中含有zz的信息
db.mystu.find(
{stuname:/zz/}
)db.mystu.find(
{stuname:{$regex:"zz"}}
)//不区分大小写
db.mystu.find(
{stuname:/zz/i}
)db.mystu.find(
{stuname:{$regex:"zz",$options:"$i"}}
)

$regex与正则表达式对象的区别:

在KaTeX parse error: Expected '}', got 'EOF' at end of input: …达式对象,例如:{name:{in:[joei,jack}}
在使⽤隐式的and操作符中,只能使⽤and操作符中,只能使⽤and操作符中,只能使⽤regex,例如:{name:{$regex:^joi, KaTeX parse error: Expected 'EOF', got '}' at position 13: nin:['john']}̲} 当option选项中包含X…regex,例如:{name:{$regex:m.line,
$options:“si”}}

not使⽤
查询出所有名字不含有“zz”的学⽣信息

db.mystu.find(
{stuname:{$not:/zz/}}
)

注意$ not不能与$ regex同时使⽤
数组查询$ all和$ index应⽤
查询出拥有MONGODB和html书籍的学⽣

db.mystu.find(
{books:{$all:["html","MONGODB"]}}
)

查询出拥有第⼆本书是java书籍的学⽣

db.mystu.find(
{"books.1":"java"}
)

数组⻓度 $ size
查询出拥有四本书籍的所有学⽣信息

db.mystu.find(
{books:{$size:4}}
)

查询出拥有⼤于三本书籍的所有学⽣信息

db.mystu.find(
{books:{$size:{$gt:3}}}
)

⽆法实现, $ size⽆法与$ gt, $lt等⽐较符同时使⽤
1.新增⼀个书籍数量的字段

db.mystu.updateMany({},{$set:{num:4}})

2.给zzxb学⽣,新增⼀本regex书籍

db.mystu.update(
{stuname:"zzxb"},
{$push:{books:"regex"},
$inc:{num:1}}
)

3.查询⼤于4本书的学⽣

db.mystu.find({num:{$gt:4}})
$slice

查询出zzxb学⽣,拥有的第2到第4本书

db.mystu.find(
{stuname:"zzxb"}, { books: { $slice: [ 1, 4 ] } }
)

查询出zzxb学⽣,拥有的最后⼀本书

db.mystu.find(
{stuname:"zzxb"}, { books: { $slice: -1 } }
)

⽂档查询
为zzxb,添加新的学习简历集合

var zzxb = [
{school:"善林路⼩学",score:"A"},
{school:"140初中",score:"B"},
{school:"109⾼中",score:"A+"}
]

插⼊

db.students.update({stuname:"zzxb"},
{$set:{school:[
{school:"善林路⼩学",score:"A"},
{school:"140初中",score:"B"},
{school:"109⾼中",score:"A+"}]
}});

查询在109中学,上过学的学⽣
匹配查询:

db.students.find({school:{school:"109⾼中"}});

⽆法查询出结果,必须要完全匹配

db.students.find({school:{school:"109⾼中",score:"A+"}});

点“.”定位器:

db.students.find({"school.school":"109⾼中"})

查询出在140初中且成绩为A的学⽣

db.students.find(
{"school.school":"140初中","school.score":"A"})

查询错误,查出不符合要求的记录

使⽤用$elemMatch查询⼦子⽂文档

db.students.find({school:{$elemMatch:{school:"140初中",score:"A"}}});
db.students.find({school:{$elemMatch:{school:"140初中"}}});

where复杂查询

JS字符串串⽅方式:

  db.students.find({$where:"this.age > 25"});

Js函数⽅方式

  db.students.find({$where:function() {if (this.age > 25 && this.age < 30){return this;
} }
});

复杂:

  db.students.find({$where:function (){if(this.city == 'jinan'){for(var i = 0;i < this.books.length;i++){var java = this.books[i];if(java == 'oracle'){return this;
} }
} }});

分⻚页与排序
limit、skip
查询出前五条记录

  db.students.find({},{stuname:1}).limit(5);

查出5-10条记录 db.students.find({},

{stuname:1}).limit(5).skip(5);

sort排序 倒序:

  db.students.find({},{stuname:1,age:1}).limit(5).skip(5).sort({age:-1});

正序:

 db.students.find({},{stuname:1,age:1}).limit(5).skip(5).sort({age:1});

游标

使用游标

var stu = db.student.find();
while(stu.hasNext()){var. obj = stu.next();print(obj.stuname);
}

游标销毁条件

  • 客户端主动销毁
  • 游标到底
  • ⼗十分钟内游标没使⽤用,⾃自动销毁

索引

创建索引

db.books.ensureIndex({number:1});

索引使⽤用需要注意的地⽅方

  1. 创建索引:1是正序索引,-1是倒序索引
  2. 索引的创建在提⾼高查询性能的同时会影响插⼊入的性能。对于经常查询少插⼊入的集合可以考虑⽤用
    索引。
  3. 符合索引要注意索引的先后顺序
  4. 每个键全建⽴立索引不不⼀一定就能提⾼高性能。

创建索引同时指定索引名字

 db.books.ensureIndex({number:-1},{name:"ix_number"});

唯⼀一索引

     db.books.ensureIndex({bookname:1},{unique:true});

Hint
如何强制查询使⽤用指定的索引

 db.books.find({bookname:"bookname1"}).hint({bookname:1});

explain
查看本次查询使⽤用索引情况和查询数据的状况信息

db.books.find({bookname:"book1"}).explain(); db.books.find({bookname:"book23456"}).explain("executionStats");//version 3.0以 上

查看所有索引

db.system.indexses.find(); db.books.getIndexes();//version 3.0以上

后台执⾏行行创建索引

 db.books.ensureIndex({bookname:1},{background:true});

删除索引

db.runCommand({dropindexes:"books",index:"ix_number"});

空间索引

创建2D索引

db.maps.ensureIndex({gis:"2d"},{min:-1,max:201});默认会创建⼀一个【-180,180】之间的2D索引

案例例1
查询点(70,180)最近的三个点

db.maps.find({gis:{$near:[70,180]}}).limit(3);

案例例2
查询以点 (50,50)和点(190,190)为对⻆角线的正⽅方形中的所有点

  db.maps.find({gis:{$within:{$box:[[50,50],[190,190]]}}});

案例例3 查询以点(50,50)为圆⼼心,半径为100规则下的圆下的所有点

 db.maps.find({gis:{$within:{$center:[[50,50],150]}}});

备份与恢复
备份:

 mongodump -h localhost -d skmongo -o /mydata

恢复:

mongorestore -h localhost:27017 -d skmongo /yundata/backup/mongo/skmongo

Mongo入门-2-基本操作相关推荐

  1. MONGO入门(Mongo,maven)

    mongo入门 一.MongoDB相关概念 1.1 业务应用场景 二.mongo的基本操作 2.1数据库的创建 2.2 查看当前数据库 2.3数据库的增删改查 2.3.1mongo的删除数据库的操作: ...

  2. python使用教程pandas-Python 数据处理库 pandas 入门教程基本操作

    pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有表现力的数据结 ...

  3. 逆向爬虫14 Mongo入门

    逆向爬虫14 Mongo入门 一.MongoDB和MySQL的区别 MongoDB 是一种 非关系型数据库,存放任意形式的 json 格式数据:而 MySQL 是一种 关系型数据库,只能存放事先定义好 ...

  4. 立创EDA仿真入门1 基本操作

    立创EDA仿真入门1 基本操作 一.进入EDA仿真环境 二.画原理图 1. 新建工程 2. 绘制如下电路图 三.仿真 1. 运行仿真 2. 导出波形图 3. 查看仪表 一.进入EDA仿真环境 网址: ...

  5. OpenCV基础入门系列基本操作——贰

    系列博文第二篇,关于OpenCV4的一些基本操作和使用. 博文主要以实例展示不同的函数使用方法. OpenCV基础入门系列基本操作--壹 前言 下述为本博文需要用到的各类头文件以及全局变量等 读者可根 ...

  6. mysql入门教程——基本操作

    MySQL入门教程--基本操作 一.MySQL基础 1.数据库介绍 2.mysql安装和配置 3.超管密码修改 二.数据库的操作 1.SQL语句 2.数据库操作 2.1.查询数据库 2.2.创建数据库 ...

  7. ROS入门的基本操作

    ROS入门的基本操作 一.ROS命令行工具的使用 二.创建工作空间与功能包 创建工作空间的流程 创建功能包的流程 三.发布者Publisher的编程实现 如何实现一个发布者 如何配置CMakeLIst ...

  8. R语言怎么写积分_R语言入门的基本操作(1)

    大家好,这是从知乎<一个大学生的日常笔记>中迁移过来的R语言教程的第一篇. 这一份笔记follow了两本非常优秀的R语言教材,分别是Robert I.Kabacoff的<R语言实战& ...

  9. Mongo学习---mongo入门1

    Docker安装以及设置mongo用户 docker pull mongo (拉取镜像 默认最新版本) docker images (查看镜像) docker run -p 27017:27017 - ...

  10. HDFS 入门和基本操作

    1.HDFS 是做什么的 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS,hdfs是分布式计算中数据存储管理的基础,是基于流数据模式 ...

最新文章

  1. cocos2d-x-3.1 win32程序-初识源代码(coco2d-x 学习笔记二)
  2. poj 3281(最大流)
  3. Linux各发行版本之间的比较
  4. laravel+php+支付功能,laravel+微信支付源码
  5. 《算法竞赛进阶指南》0.5排序
  6. middlegenidenbsp;nbsp;eclipsenbsp;的插件
  7. statistic在c语言中的作用,模型评价除了C-statistic,还能用什么指标?
  8. 用Lightroom Classic CC2019 mac合并照片以创建全景和HDR全景
  9. 川土微电子 | CA-IS3050U隔离式CAN收发器
  10. 在Dart中使用FFI调用Rust函数
  11. Adobe Spark试用手记
  12. 如何使用 Pixelmator Pro调整照片,打印出最完美的照片效果?
  13. 移动硬盘插到电脑上突然打不开或者没有显示的解决方法【已解决】不删设备不删驱动不改电源选项
  14. 榜首易主!在线票务大战胜负已定,透过中影这个小动作早已看穿一切
  15. 洛谷P1417:优先级与背包问题
  16. icode 三级训练场if入门1-10关
  17. 候鸟浏览器、变色龙指纹浏览器、antidetect防关联浏览器、ghostbrowser横评
  18. 计算机考研之中南大学PK东南大学
  19. 计算机组装与维护过程及内容,计算机组装与维护
  20. 【解决方案】RTSP协议视频平台EasyNVR建立智能水库管理系统,打造智慧水库

热门文章

  1. kafka 0.10.0.0 版本
  2. 英雄联盟7月23日维修服务器,LOL7月23日更新维护结束时间 7月23日什么时候可以上线 LOL7月23日更新维护内容_蚕豆网新闻...
  3. 2017华为软件精英挑战赛决赛思路分享
  4. python语言基本认识_Python学习之认知(一)
  5. 基于改进的蚂蚁群算法求解最短路径问题、二次分配问题、背包问题【MatlabPython代码实现】
  6. Java中outer标签的用法
  7. 引导魔女之力,征服星辰大海 升级篇: 重要事情说三遍: 升级!升级!!升满级!!! 简述: 1.本篇仅升级,涉及到的技巧全职业都可以参考; 2.考虑到萌新刚玩通关护卫者系统等级不高,故
  8. java采用降低图片分辨率大小来压缩图片大小
  9. 第17章 国际贸易与资本流动
  10. linux nc命令 测试网络连通性