文章目录
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 :(可选)抛出异常的级别。