数据库的查询
show dbs
show dbs查看所有数据库
db
db查看当前数据库
MongoDB默认使用的数据库是test
数据库的创建
use 数据库名注意:
use只是切换,不会立即创建。必须插入数据后数据库才真正存在
只用use数据库名,数据库只存在内存中,没有持久化。需要在数据库内插入数据,数据存在磁盘中,数据持久化
【示例】
use articledb数据库的删除
db.dropDatabase()删除当前使用的数据库
返回结果{ ok: 1, dropped: ‘数据库名’ } 表示成功删除数据库
集合的查询
show collections查看当前数据库下的所有集合
集合的创建
db.createCollection('集合名')在当前使用的数据库中显式创建集合 插入数据的同时可以隐式创建集合
MongoDB中的集合相当于关系型数据库中的表
集合的删除
db.集合名.drop()删除指定的集合 返回true 表示成功删除集合
文档的查询
db.集合名.find()查看当前集合下的所有文档数据
db.集合名.find({field: value})根据条件查询当前集合下的所有文档数据
db.集合名.findOne()查看当前集合下的一条文档数据
db.集合名.findOne({field: value})根据条件查询当前集合下的一条文档数据
db.集合名.find(
{field: value}, #过滤条件
{field: 1, field: 0}) #指定字段投影查询指定查询显示结构;默认_id会显示;field: 1显示该字短,field: 0不显示该字段
注意:投影查询需要添加在find()添加过滤条件语句。即使无过滤条件,也要写上{}
db.集合名.find(/正则表达式/)MongoDB的模糊查询是通过正则表达式的方式实现
db.集合名称.find({ field : { $gt: value }}) // 大于: field > value
db.集合名称.find({ field : { $lt: value }}) // 小于: field < value
db.集合名称.find({ field : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ field : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ field : { $ne: value }}) // 不等于: field != value文档的比较查询
文档的插入
db.集合名.insert(文档)向集合插入一条文档数据 文档相当于关系型数据库的一行数据(row)
如果数据库中该集合不存在,自动创建该集合再插入数据
db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光明 媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})db.集合名.insertMany([文档,文档,...,文档])
批量插入多条文档数据
db.comment.insertMany([ {"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-08- 05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"}, {"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"}, {"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船 长","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"}, {"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯 撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"}, {"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date("2019-08- 06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"} ]);文档的修改
db.集合名.updateOne(
{field: value}, # 过滤条件
{$set: {field:value}} # 修改语句
) 根据条件修改一条数据指定的字段
db.comment.updateOne(
{_id: "1"},
{$set: {nickname: "李四"}}
)db.集合名.updateMany(
{field: value}, # 过滤条件
{$set: {field:value}} # 修改语句
) 根据条件修改所有数据的指定字段
db.comment.updateMany(
{userid: "1003"},
{$set: {nickname: "李四"}}
)文档的删除
db.集合名.remove(
{field: value} #过滤条件
)根据条件删除文档数据
db.集合名.remove({})注意:删除所有数据。请慎用
文档的统计
db.集合名.countDocuments() 统计所有文档数量
db.集合名.countDocuments(
{field: value} #过滤条件
)按条件统计所有文档数量
文档的分页
db.集合名.find().skip().limit()
skip()跳过指定数量的数据limit()限制返回查询结果的数量
文档的排序
db.集合名.find().sort({field: value})
field: 1升序;field: -1降序
索引的查询
db.集合名.getIndexes()查看现有的索引,返回一个集合中的所有索引的数组。
索引的创建
db.集合名.createIndex({field: options})
field: 1升序索引field: -1降序索引 索引也是个集合
索引的删除
db.集合名.dropIndex("index_name")通过索引名称删除
db.集合名.dropIndex({ age: 1 })通过索引定义删除
db.集合名.dropIndexs()删除所有索引
_id这个索引不会被删除
索引的执行计划
db.集合名.find({field: value}).explain("executionStats")不传参 只返回查询计划,不实际执行;
"executionStats"实际执行并返回详细统计数据;
"allPlansExecution"返回所有候选计划的执行情况;
索引的覆盖查询
db.users.find(
{ field: 1, _id: 0 }
).explain("executionStats")查询所需的所有字段都包含在索引中,MongoDB 直接从索引返回结果,不需要再去读取文档本身。
必须排除 _id,否则需要回文档取数据