mongodb shell基础命令
mongodb shell命令
1.数据库基本操作
在mongodb中,使用use来创建和选择数据库,当数据库不存在时,use会创建一个新的数据库,但是这数据库并没有持久化到硬盘里面,而存在内存中,只有当用户往这个新创建的空数据库建collection才会做持久化操作。
创建和切换数据库
use 数据库名称
查看有权限查看的所有的数据库
mongodb是不对空数据库做持久化的,所以新创建的空数据库,用show指令是看不见的,必须建collection后才能看见。
show dbs
show databases
查看当前正在使用的数据库
在mongo中db就代表了你当前正在使用的数据库对象。
db
删除数据库
db代表当前正在使用的数据库对象,删除数据库前,先要切换到要删除的数据库。主要用来删除已经持久化的数据库。
db.dropDatabase()
查看数据库用户
show users
2.集合的基本操作
在mongodb中集合(collection)对应mysql中的表(table)
显式创建collection
db.createCollection("CollectionName")
查看collection
可以看到mongodb一些操作命令是跟mysql兼容的。
show collections
show tables
隐式创建collection
当我们向一个不存在的collection插入一个文档(document)时,会先隐式创建一个collection,再进行数据的插入。
db.myCollection.insertOne( { name: "xiaoming" } );
3.增删改查
在mongodb中每一行数据对应一个文档(document),每个文档是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。BSON可以是二进制形式的JSON。MongoDB中的记录是一个文档,它是一个由字段和值对(fifield:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
3.1 增
插入一个文档
insertOne是用来插入一个文档的,当传入多个文档文档对象时,就会报错。
用法:
db.collectionName.insertOne(<document>,
{
writeConcern:<document>
}
)
- writeConcern:写关注,可选。
db.inventory.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
插入多个文档
insertMany用来插入多个文档(document),传入的是一个数组对象,里面包含了多个插入对象。
用法:
db.collectionName.insertOne(
[<document1>,<document2>],
{
writeConcern:<document>,
ordered:boolean
}
)
- writeConcern:写关注,可选。
- ordered:执行有序插入还是无序插入。默认为
true
。
列子:
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
插入一个或多个
insert方法可以插入一个document也可以插入多个document,这里就不多说了,当成insertMany+insertOne综合来用就可以了。
用法:
db.inventory.insert({[<document1>,<document2>]},
{
writeConcern:<document>,
ordered:boolean
}
)
3.2 查
查询多条信息
查使用find()方法
用法:
db.collectionName.find(query,projection)
- query:查询条件
- projection:指定包含的字段
例子:
#查询包含size: { h: 14, w: 21, uom: "cm" }的文档
db.collection.find( { size: { h: 14, w: 21, uom: "cm" } } )
#传入一个{name:1}来表示指定显示name字段,其他字段不显示
db.collection.find( { size: { h: 14, w: 21, uom: "cm" } },{name:1} )
查询一条信息
查询一条信息用findOne()方法,调用此方法,返回的是查询到的第一条信息,当找到第一条信息时就不会继续往下找了。
用法:
db.collectionName.findOne(query,projection)
例子:
#查询size: { h: 14, w: 21, uom: "cm" }的文档,找到立即返回
db.collection.find( { size: { h: 14, w: 21, uom: "cm" } } )
分页查询
limit(num),指定要查询的条数。
skip(num),指定跳过的条数
//查询前面前前三条数据
db.collection.find().limit(3)
//从第2条开始查询,查到第5条
db.collection.find().skip(2).limit(3)
排序查询
sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
//按userid的降序
db.collection.find().sort({userid:-1})
//按userid的升序
db.collection.find().sort({userid:1})
正则查询
mongodb支持正则表达式,放在 / 之间
db.collect.find({userid:/正则表达式子/})
注意:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
条件查询
查询时我们往往需要一些比较条件,>,<,or,and等等。
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
- $gt 大于
- $lt 小于
- $gte 不大于
- $lte 不小于
- $ne 不等于
db.集合名称.find({userid:{$in:["1003","1004"]}})
db.集合名称.find({userid:{$nin:["1003","1004"]}})
- $in 包含
- $nin 不包含
$and:[ { },{ },{ } ]
//例子:
db.集合名称.find({
$and[
{userid:{$gt:NumberInt(700)}},
{name:"zhangsan"}
]
})
$or:[ { },{ },{ } ]
//例子:
db.集合名称.find({
$or[
{userid:{$lt:100}},
{name:"zhangsan"}
]
})
3.3改
使用update()方法可以进行collection的文档信息的更改。
用法:
db.collection.update(query, update, options)
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string>
// Available starting in MongoDB 4.2
}
)
- query:查询条件
- update:更改的信息(默认会直接覆盖整个文档)
- upsert:可选。如果设置为true,则在没有与查询条件匹配的文档时创建新文档。默认值为false,如果找不到匹配项,则不会插入新文档。
- multi :可选。如果设置为true,则更新符合查询条件的多个文档。如果设置为false,则更新一个文档。默认值为false。
例子:
//使用$set符可以只修改文档中的likenum字段,而非直接将整个文档覆盖
db.collection.update({_id:"2"},{$set:{likenum:NumberInt(889)}})
//查询所有包含userid=1003的信息,并修改其中的likenum字段,multi为更新符合查询条件的多个文档
db.collection.update(
{userid:"1003"}, //条件
{$set:{likenum:NumberInt(889)}}, //修改
{multi:true} //操作参数(这里选择修改多个符合条件的文档)
)
3.4删
删除操作十分简单,跟上面的套路一样,有分删除一条和多条。
remove(),delete()One,deleteMany()方法
//综合
db.collection.remove(
<query>,
{
justOne: <boolean>, //删除一条
writeConcern: <document>,
collation: <document>
}
)
//删除一条
db.collection.deleteOne(
<query>,
{
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in MongoDB 4.4
}
)
//删除多条
db.collection.deleteMany(
<query>,
{
writeConcern: <document>,
collation: <document>
}
)
列子:
//删除_id=1的
db.collection.remove({_id:"1"})
//删除全部
db.collection.remove({})
//只删除userid=1的信息
db.collection.deleteOne({userid:1})
//删除多条name="zhangsan"的文档
db.collection.deleteMany({name:"zhangsan"})
4.索引操作
索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB就必须执行全集合扫描,以选择与查询语句匹配的文档。MongoDB索引使用B树数据结构。
查看索引
db.collection.getIndexes()
mongodb会给每个collection创建一个索引,默认为以_id字段建立,也就是(机器码+时间戳)的默认字段。
创建索引
db.collection.createIndex(
{
"a": 1 //索引字段
},
{
unique: true, //条件
sparse: true,
expireAfterSeconds: 3600
}
)
创建
//以userid升序创建索引
db.collection.createIndex({userid:1})
//以userid升序,name降序创建索引
db.collection.createIndex({userid:1,name:-1})
删除索引
db.collection.dropIndex(index)
//例子:删除以userid为升序的索引
db.collection.dropIndex({userid:1})
//删除所有索引
db.collection.dropIndexes()
查看执行计划
通常,我们想知道,建立的索引是否有效,效果如何,都需要通过执行计划查看。
db.collection.find(query,options).explain(options)
//结果看"winningPlan"中的"stage",
//如果为"COLLSCAN"就是全集合搜索,如果是 "IXSCAN"就是基于索引扫描
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)