mongo shell操作与mongo命令

mongo shell操作

在mongodb服务启动的时候,直接使用mongo命令(环境变量进行了配置才可以直接使用,不然要手动进入mongodb的bin文件夹目录下)进入mongodb操作

在这里插入图片描述

原生方法
Date()

若直接使用Date(),则直接放回当前日期字符串.

在这里插入图片描述

UUID(hex_string)

将32字节的十六进制字符串抓换成BSON子类型的UUID

ObjectId.valueOf()

​ 讲一个ObjectId的属性str显示为十六进制字符串

Mongo.getDB(database)

​ 返回一个数据库对象,它标识指定的数据库

Mongo(host:port)

​ 创建一个连接对象,它连接到指定的主机和端口

connect(string)

​ 连接到指定MongoDB实例中的指定数据库,返回一个数据库对象,string的格式如: host:port/database,如db = connect(“localhost:27017/test”),该语法等同于Mongo(host:port).getDB(database)

cat(path)

​ 与linux差不多,返回指定路径的文件的内容

version()

​ 返回当前MongoDB shell的版本

在这里插入图片描述

cd(path)

​ 将工作目录切换到指定路径

getMemInfo()

​ 返回当前shell占用的内存量

hostname()

​ 返回运行当前MongoDB shell 的系统的主机名

load(path)

​ 在shell中加载并运行参数path指定的js文件

_rand()

​ 返回一个0~1的随机数
在这里插入图片描述

mongo命令

数据库

1、查看数据库(show)
show databases  
show dbs

在这里插入图片描述

2、进入/创建数据库(use)

选择不存在的数据库会进行隐式创建 当该数据库存入数据后会自动显式创建

use students
> switched to db students

在这里插入图片描述

数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

  • 不能是空字符串(“”)。
  • 不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
  • 应全部小写。
  • 最多64字节。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
3、查看当前所在数据库(db)

执行 “db” 命令可以显示当前数据库对象或集合。

db

在这里插入图片描述

4、删除数据库(dropDatabase)
//删除当前数据库,即先切换到要删除的数据库
db.dropDatabase()  

集合

1、创建集合(createCollection)
//其实就是MySQL的表名table
db.createCollection("集合名",options)

在这里插入图片描述

options 可以是如下参数:

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId布尔3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

2、查看集合(show)
show collections
show tables

在这里插入图片描述

3、删除集合
db.集合名.drop()

在这里插入图片描述

文档

1、插入文档(insert)
db.集合名.insert(document)
db.集合名.save(document)// 废弃

//例
db.user.insert({"username":"zwn","age":13})

在这里插入图片描述

db.collection.insertOne()  向指定集合中插入一条文档数据
db.collection.insertMany() 向指定集合中插入多条文档数据

参数说明:

  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

在这里插入图片描述

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

在这里插入图片描述

2、查询文档(find)

find() 方法以非结构化的方式来显示所有文档

db.集合名.find(query, projection)

在这里插入图片描述

  • query :可选,使用查询操作符指定查询条件

  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    映射

    查询时 指定返回需要的字段

    1 允许映射

    0 禁止映射

    db.users.find(条件,指定返回参数对象)
    
    db.users.find({level:{$lt:5}},{username:1})
    
    //结果
    { "_id" : ObjectId("5fcf72a2e3fd82b1c7a30acf"), "username" : "kyogre" }
    { "_id" : ObjectId("5fcf731ae3fd82b1c7a30ad0"), "username" : "zhangs" }
    
    
    不指定返回映射对象的话 所有字段映射都为1
    指定返回映射对象的话 根据指定的 映射开关返回对应 数据
    指定返回映射对象 但是没有指定 _id为0的话 _id默认为 1
    
    
    > db.users.find({level:{$lt:5}},{username:1,_id:0})
    { "username" : "kyogre" }
    { "username" : "zhangs" }
                            
    
    
方法操作符

limit(n): 取出n条数据

> db.users.find({$or:[{"username":"zhangs"},{"level":{$lt:5}}]}).limit(2)

//结果
{ "_id" : ObjectId("5fcf72a2e3fd82b1c7a30acf"), "username" : "kyogre", "pwd" : "111111", "level" : 2, "numbers" : [ [ 2 ] ] }
{ "_id" : ObjectId("5fcf731ae3fd82b1c7a30ad0"), "username" : "zhangs", "pwd" : "1111121", "level" : 3, "numbers" : [ [ 2 ] ] }

skip(m): 跳过m条前的数据 取出m+1条以及以后的数据

 db.users.find({$or:[{"username":"zhangs"},{"level":{$lt:5}}]}).skip(1)
 
 //结果
{ "_id" : ObjectId("5fcf731ae3fd82b1c7a30ad0"), "username" : "zhangs", "pwd" : "1111121", "level" : 3, "numbers" : [ [ 2 ] ] }
{ "_id" : ObjectId("5fcf75d5e3fd82b1c7a30ad2"), "username" : "zhangs", "pwd" : "1111121", "level" : 5, "numbers" : [ [ 2 ] ] }

pretty(): 展示结构格式化后的数据

 db.users.find({$or:[{"username":"zhangs"},{"level":{$lt:5}}]}).pretty()
{
        "_id" : ObjectId("5fcf72a2e3fd82b1c7a30acf"),
        "username" : "kyogre",
        "pwd" : "111111",
        "level" : 2,
        "numbers" : [
                [
                        2
                ]
        ]
}
...

sort(): 结果排序

sort({key:排序参数})
排序参数:
1 升序
-1 降序
ASCII排序 数字大小排序

> db.users.find().sort({username:1}) 查询所有内容按照 username 的 ASCII顺位排序 升序
//结果
{ "_id" : ObjectId("5fcf72a2e3fd82b1c7a30acf"), "username" : "kyogre", "pwd" : "111111", "level" : 2, "numbers" : [ [ 2 ] ] }
{ "_id" : ObjectId("5fcf731ae3fd82b1c7a30ad1"), "username" : "lisi", "pwd" : "33311199", "level" : 6, "numbers" : [ [ 2 ] ] }
{ "_id" : ObjectId("5fcf731ae3fd82b1c7a30ad0"), "username" : "zhangs", "pwd" : "1111121", "level" : 3, "numbers" : [ [ 2 ] ] }
{ "_id" : ObjectId("5fcf75d5e3fd82b1c7a30ad2"), "username" : "zhangs", "pwd" : "1111121", "level" : 5, "numbers" : [ [ 2 ] ] }
比较操作符
操作格式范例
等于{:}db.集合名.find({"by":"jojo"}).pretty()
小于{:{$lt:}}db.集合名.find({"likes":{$lt:50}}).pretty()
小于或等于{:{$lte:}}db.集合名.find({"likes":{$lte:50}}).pretty()
大于{:{$gt:}}db.集合名.find({"likes":{$gt:50}}).pretty()
大于或等于{:{$gte:}}db.集合名.find({"likes":{$gte:50}}).pretty()
不等于{:{$ne:}}db.集合名.find({"likes":{$ne:50}}).pretty()

AND 条件

db.集合名.find({key1:value1, key2:value2}).pretty()

OR 条件

db.集合名.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
类型操作符

$type数据类型

db.集合名.find({key1:{$type:数据类型/数据类型所对应数字}}).pretty()
db.集合名.find({key1:{$type:sring}}).pretty()
db.集合名.find({key1:{$type:1}}).pretty()

查询一个文档

db.集合名.findone()

查询文档数量

db.集合名.count()
3、更新文档(update)
方法:

MongoDB 使用 update()save() 方法来更新集合中的文档。

update() 方法

update() 方法用于更新已存在的文档。

updateOne()updateMany()分别是更新一条和更新多条文档数据

语法格式如下:

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

db.collection.update({查询条件},{操作符:更新的数据json对象},{可选配置参数})

参数说明:

  • query : update的查询条件,如果为空{},那么就是更新所有,query类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
  • writeConcern :可选,抛出异常的级别。
更新操作符
1.$inc增加

用法:{$inc:{field:value}}

作用:对一个数字字段的某个field增加value

示例:将name为chenzhou的学生的age增加5

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 22 }
#查询结果显示年龄为22
> db.students.update({name:"chenzhou"},{$inc:{age:5}})
#执行修改,把age增加5
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 }
> 
#查询结果显示年龄为27,修改成功
2.$set设置

用法:{$set:{field:value}}

作用:把文档中某个字段field的值设置为value

示例: 把chenzhou的年龄设为23岁

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 }
> db.students.update({name:"chenzhou"},{$set:{age:23}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 }

从结果可以看到,更新后年龄从27变成了23

3.$unset删除

用法:{$unset:{field:1}}

作用:删除某个字段field

示例: 将chenzhou的年龄字段删除

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 }
> db.students.update({name:"chenzhou"},{$unset:{age:1}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }
4.$push追加

用法:{$push:{field:value}}

作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型

示例:给chenzhou添加别名"michael"

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$push:{"ailas":"Michael"}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }
> 

由结果可以看到,记录中追加了一个数组类型字段alias,且字段有一个为"Michael"的值

5.pushAll追加

用法:{$pushAll:{field:value_array}}

作用:用法同 p u s h 一样,只是 push一样,只是 push一样,只是pushAll可以一次追加多个值到一个数组字段内。

示例:给chenzhou追加别名A1,A2

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$pushAll:{"ailas":["A1","A2"]}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }
> 
6.$addToSet增加

用法:{$addToSet:{field:value}}

作用:加一个值到数组内,而且只有当这个值在数组中不存在时才增加

示例:往chenzhou的别名字段里添加两个别名A3、A4

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$addToSet:{"ailas":["A3","A4"]}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }
> 

由结果可以看出,更新后ailas字段里多了一个对象,这个对象里包含2个数据,分别是A3、A4

7.$pop删除

用法:删除数组内第一个值:{KaTeX parse error: Expected 'EOF', got '}' at position 15: pop:{field:-1}}̲、删除数组内最后一个值:{pop:{field:1}}

作用:用于删除数组内的一个值

示例: 删除chenzhou记录中alias字段中第一个别名

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$pop:{"ailas":-1}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }
> 

由结果可以看书,第一个别名Michael已经被删除了。

我们再使用命令删除最后一个别名:

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$pop:{"ailas":1}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }
> 

由结果可以看出,alias字段中最后一个别名[“A3”,“A4”]被删除了。

8.$pull删除

用法:{$pull:{field:_value}}

作用:从数组field内删除一个等于_value的值

示例:删除chenzhou记录中的别名A1

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$pull:{"ailas":"A1"}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A2" ], "name" : "chenzhou" }
> 
9.$pullAll删除

用法:{$pullAll:value_array}

作用:用法同$pull一样,可以一次性删除数组内的多个值

示例: 删除chenzhou记录内的所有别名

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$pullAll:{"ailas":["A1","A2"]}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" }
> 

可以看到A1和A2已经全部被删除了

10.$rename重命名

用法:{$rename:{old_field_name:new_field_name}}

作用:对字段进行重命名

示例:把chenzhou记录的name字段重命名为sname

> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" }
> db.students.update({name:"chenzhou"},{$rename:{"name":"sname"}})
> db.students.find()
{ "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "sname" : "chenzhou" }
> 
4、删除文档(remove)

MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

remove() 方法的基本语法格式如下所示:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值