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"就是基于索引扫描

猜你喜欢

转载自blog.csdn.net/qq_43203949/article/details/111463862