1.数据库操作
1.1选择和创建数据库的语法格式:
use 数据库名称
如果数据库不存在则自动创建
查看有权限查看的所有数据库命令:
show dbs或show databases
注意:在MongoDB中,集合只有在内容插入后才会创建!就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
查看当前正在使用的数据库命令:
db
MongoDB中默认的数据库为test,如果你没有选择数据库,集合将存放在test数据库中。
1.2数据库的删除
MongoDB删除数据库的语法格式如下:
db.dropDatabase()
提示:主要用来删除已经持久化的数据库,删除的是当前所在的库。
2.集合操作
集合,类似于关系型数据库中的表。
2.1可以显示的创建,也可以隐式的创建。
2.1.1.集合的显式创建
基本语法格式:
db.createCollection(name)
参数说明:name为要创建的集合名
2.1.2集合的隐式创建
当向集合中插入一个文档,如果文档不存在,就会自动创建集合。
2.2 查询当前库中的所有集合
基本语法格式:
show collections
2.3 集合的删除
基本语法格式:
db.collection.drop()
如果成功删除选定集合,则返回true,否则返回false
3.文档基本crud
文档的数据机构和sjon基本一样。所有存储在集合中的数据都是BSON格式。
3.1文档的插入
3.11单个文档插入
使用insert()或save()方法向集合中插入文档。语法如下:
db.collection.insert( <document or array of documents>, { writeConcern:<document>, ordered:<boolean> } )
参数
示例:
返回WriteResult({"nInserted" : 1}),则说明插入一条数据成功。
提示:
1.集合如果不存在,则会隐式创建
2.mongo中的数字,默认情况下是duuble类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了。
3.插入当前日期使用new Date()
4.插入的数据没有指定_id会自动生成主键值
5.如果某字段没值,可以赋值为null,或不写该字段。
3.1.2批量插入
语法如下:
db.collection.insertMany( [<document 1>,<document 2>,...], { writeConcern:<document>, ordered:<boolean> } )
示例:
3.2文档的基本查询
查询数据的语法格式如下:
db.collection.find(<query>,[projection])
参数:
3.2.1基本查询
示例1:查询集合中的所有文档
db.collection.find()或db.collection.find({})
这里每条文档会有个交_id的字段,这个相当于我们原来关系型数据库中表的主键,当你在插入文档记录时没有指定该字段,MongoDB会自动创建,其类型是ObjectID类型。
示例2:条件查询集合中的文档
在find()中添加参数即可,参数也是json格式,如下:
db.collection.find({"key":value})
如果需要返回符合条件的第一条数据,我们可以使用findOne命令来实现,语法跟find一样
3.2.2投影查询
如果要查询机构返回部分字段,则需要使用投影查询(不现实所有字段,只显示指定的字段)。
如果查询全部,只显示部分字段,该字段用json格式1表示。默认_id要显示,如果想排除_id则跟上_id:0
3.3文档的分页查询
3.3.1统计查询
统计查询试用版count()方法,语法如下:
db.collection.count(query,options)
参数:
(1)统计所有记录数
统计comment集合的所有的记录数
db.collection.count()
(2)按条件统计记录数
例如:统计id为1的记录数
3.3.2 分页列表查询
可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。
基本语法如下:
db.collection.find().limit(number1).skip(number2)
skip和limit两个函数可以换位置。相当于mysql的limit(number2,number1)
1、如果想返回指定的记录,可以在find后面用limit来返回结果(top N),默认前20条
db.collection.find().limit(5);//返回前5条记录数。
2、skip方法同样接受一个数字参数作为跳过的记录条数,(前N个不要),默认是0
db.collection.find().skip(3);//跳过前3条记录,返回后面的记录。
3.分页查询
db.collection.find().limit(number1).skip(number2) //跳过前number2条记录,返回number1条记录
4.排序查询
sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1为升序,-1为降序。
语法如下:
db.collection.find().sort({key:1})
3.3.3文档的更多查询
1.正则的复杂条件查询
2.比较查询
3.包含查询
4.条件连接查询
3.4 文档的更新
更新文档的语法:
db.collection.update(query,update,options) //或 db.collection.update( <query>, <update>, { upsert:<boolean>, multi:<boolean>, writeConcern:<document>, arrayFilters:[<filterdocument1>,....], hint:<document|string> //available starting in mongodb 4.2 } )
示例:
1.覆盖的修改
执行db.comment.update({"_id":"1"},{"name":"xxx"})后,发现除了name字段外其他字段都没见了。
2.局部的修改
为了解决上面问题,使用修改器$set来实现。
执行db.comment.update({"_id":"2"},{$set:{"name":"xxxx"}}),只修改该文档的name字段的值,不会出现其他字段消失。
3.批量修改
例:更新所有cid为1的用户昵称为xxx
//默认只修改第一条数据 db.comment.update({"cid":"1"},{$set:{"name":"xxx"}}) //修改所有符合条件的数据 db.comment.update({"cid":"2"},{$set:{"name":"xxx"}},{multi:true})
提示:如果不加后面的参数{multi:true},multi默认为false.则只更新符合条件的第一条记录
3.5 删除文档
删除文档的语法结构:
db.collection.remove(条件)
以下语句可以将数据全部删除,请慎用
db.collection.remove({})
4.索引
4.3索引的管理操作