MongoDB原生语句的使用

查看当前数据库的版本号

db.version()

MongoDB Enterprise > db.version()
4.4.2

查看当前所在数据库

db

MongoDB Enterprise > db
test

查看当前数据库连接的地址

db.getMongo()

MongoDB Enterprise > db.getMongo()
connection to 127.0.0.1:27017

查看所有数据库

show databases/show dbs,数据库中如果没有数据是不会显示的

MongoDB Enterprise > show databases
admin       0.000GB
config      0.000GB
local       0.000GB

切换数据库

use 数据库名称,如果没有这个数据库,会先创建再切入

MongoDB Enterprise > use first_text
switched to db first_text

创建集合

db.createCollection(集合名)

MongoDB Enterprise > db.createCollection("students")
{ "ok" : 1 }

查看集合

show collections/show tables

MongoDB Enterprise > show collections
students

插入文档

db.集合名.insert({“key”:“value”})

db.集合名.save({“key”:“value”})

注:如果想要插入多条数据,可以将多个对象放在一个数组中

db.集合名.insert([{},{},{}])

注:如果插入的数据的集合不存在,会先创建再插入

# 插入5个学生信息,包括姓名,年龄,性别
MongoDB Enterprise > db.students.insert({"name":"zhangsan","age":23,"gender":"男"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"lisi","age":18,"gender":"男"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"wangwu","age":30,"gender":"男"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"xiaohong","age":26,"gender":"女"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"lihua","age":16,"gender":"女"})
WriteResult({ "nInserted" : 1 })

查询数据

db.集合名.find()

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "name" : "zhangsan", "age" : 23, "gender" : "男" }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "age" : 18, "gender" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }
MongoDB Enterprise >

查询当前数据库状态

db.stats()

MongoDB Enterprise > db.stats()
{
	"db" : "first_text",
	"collections" : 2,
	"views" : 0,
	"objects" : 14,
	"avgObjSize" : 65.28571428571429,
	"dataSize" : 914,
	"storageSize" : 73728,
	"indexes" : 2,
	"indexSize" : 73728,
	"totalSize" : 147456,
	"scaleFactor" : 1,
	"fsUsedSize" : 24420130816,
	"fsTotalSize" : 41474588672,
	"ok" : 1
}

数据库备份

db.copyDatabase(“数据库1”,“数据库2”,“地址”)

注:适合4.0及以下版本

db.copyDatabase("students","students_copy","127.0.0.1")

在最新版本中,也就是4.2版本以上,mongodb官方取消了copyDatabase和clone命令,取而代之的是mongodump和mongorestore

mongodump -h dbhost -d dbname -o dbdirectory

-h:服务器地址

-d:需要备份的数据库

-o:备份数据库要保存的路径

删除集合

db.集合名.drop()

MongoDB Enterprise > db.practice.drop()
true

删除当前所在的数据库

db.dropDatabase()

MongoDB Enterprise > db.createCollection("del_text")
{ "ok" : 1 }
MongoDB Enterprise > show databases
admin       0.000GB
config      0.000GB
first_text  0.000GB
local       0.000GB
MongoDB Enterprise > use del_text
switched to db del_text
MongoDB Enterprise > db.dropDatabase()
{ "ok" : 1 }

更新数据或修改数据

db.集合名.update(query,update[,upsert,multi])

query:条件(小于:“查看mongodb端口号 查看mongodb版本命令_pythongt”,等于:“查看mongodb端口号 查看mongodb版本命令_数据库_02ne”,大于等于:“查看mongodb端口号 查看mongodb版本命令_mongodb_03lte”)

# 将年龄大于等于22岁的学生的性别改为男士
MongoDB Enterprise > db.students.update({"age":{"$gte":22}},{"gender":"男"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男" }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "age" : 18, "gender" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }

# 由结果来看,修改了满足条件的第一条数据,而且将满足条件的这条数据整体进行了替换

update:更新后的数据,新数据

$set:只更新字段

# 将名字是lisi的学生的年龄改为26
MongoDB Enterprise > db.students.update({"name":"lisi"},{"$set":{"age":26}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男" }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "age" : 26, "gender" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }
# 加了$set后只修改了某一个字段的值

$inc:增加字段值

# 将李四年龄加2
MongoDB Enterprise > db.students.update({"name":"lisi"},{"$inc":{"age":2}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男" }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "age" : 28, "gender" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }
MongoDB Enterprise >

$rename:将一个字段重新命名

# 将lisi的gender字段改为性别
MongoDB Enterprise > db.students.update({"name":"lisi"},{"$rename":{"gender":"性别"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男" }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "age" : 28, "性别" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }

$unset:删除一个字段,后面的字典需要给一个参数1

MongoDB Enterprise > db.students.update({"name":"lisi"},{"$unset":{"age":1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男" }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "性别" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }

upsert:可选参数,是一个布尔值。作用:如果不存在update的字段,则插入更新的数据

# id为0的学生只有gender字段,如果upsert为false,则会提示没有匹配到任何信息,设置为true的时候,则会进行添加

MongoDB Enterprise > db.students.update({"gender":"男"},{"$set":{"age":33}},{"upsert":"true"})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男", "age" : 33 }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "性别" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 26, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 16, "gender" : "女" }

multi:可选参数,是一个布尔值。作用:是否将查询出来的所有符合条件的数据全部更新。true表示全部更新,false表示只更新第一条,默认是false

# 将年龄小于30岁的学生的年龄全部加2
MongoDB Enterprise > db.students.update({"age":{"$lt":30}},{"$inc":{"age":2}},{"multi":"true"})

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男", "age" : 33 }
{ "_id" : ObjectId("5fc7899287ee1122be308b91"), "name" : "lisi", "性别" : "男" }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 28, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 18, "gender" : "女" }

删除文档:

remove(query[,justOne])

query:必选项

justOne:可选参数,代表是否只删除一条数据,是一个布尔值。默认false

db.集合名.remove(query,true/false) 是否只删除一条数据

# 删除性别是男的第一个学生,只删除一条数据
MongoDB Enterprise > db.students.remove({"性别":"男"},true)

WriteResult({ "nRemoved" : 1 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男", "age" : 33 }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
{ "_id" : ObjectId("5fc789c987ee1122be308b93"), "name" : "xiaohong", "age" : 28, "gender" : "女" }
{ "_id" : ObjectId("5fc789de87ee1122be308b94"), "name" : "lihua", "age" : 18, "gender" : "女" }

db.集合名.remove(query) 根据条件删除,删除全部符合条件的数据

# 删除性别是女的所有学生
MongoDB Enterprise > db.students.remove({"gender":"女"})

WriteResult({ "nRemoved" : 2 })

MongoDB Enterprise > db.students.find()
{ "_id" : ObjectId("5fc7891987ee1122be308b90"), "gender" : "男", "age" : 33 }
{ "_id" : ObjectId("5fc789b487ee1122be308b92"), "name" : "wangwu", "age" : 30, "gender" : "男" }
MongoDB Enterprise >

db.集合名.remove({}) 删除全部文档

# 删除剩下所有的学生数据
MongoDB Enterprise > db.students.remove({})

WriteResult({ "nRemoved" : 2 })

MongoDB Enterprise > db.students.find()
MongoDB Enterprise >

条件查询

格式:find[query,是否显示此字段]

重新插入5条数据

MongoDB Enterprise > db.students.insert({"name":"zhangsan","age":20,"gender":"man"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"lisi","age":"17","gender":"woman"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"wangwu","age":"26","gender":"man"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"zhaoliu","age":"20","gender":"man"})
WriteResult({ "nInserted" : 1 })

MongoDB Enterprise > db.students.insert({"name":"lanqi","age":"12","gender":"woman"})
WriteResult({ "nInserted" : 1 })

db.集合名.find() 查询所有文档

MongoDB Enterprise > db.practice.find()

{ "_id" : ObjectId("5fc733dd47aeb8635578dcef"), "name" : "wangwu", "age" : "26", "gender" : "mam" }
{ "_id" : ObjectId("5fc7372247aeb8635578dcf3"), "name" : "zhangsan", "age" : "20", "gender" : "man" }
{ "_id" : ObjectId("5fc7381c47aeb8635578dcf4"), "name" : "zhaoliu", "age" : "20", "gender" : "woman" }
{ "_id" : ObjectId("5fc7383347aeb8635578dcf5"), "name" : "lanqi", "age" : "29", "gender" : "man" }

db.集合名.find(query) 查询所有符合条件的文档

# 查询年龄大于20的用户
MongoDB Enterprise > db.students.find({"age":{"$gt":"20"}})

{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26", "gender" : "man" }

db.集合名.find(query,{k:1(显示)/0(不显示)})

# 查询年龄大于20的用户,并且只显示名字和姓名
MongoDB Enterprise > db.students.find({"age":{"$gt":"20"}},{"name":1,"age":1})

{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26" }

注:find()方法查询时,查询出来的数据是一行显示的,可以使用pretty()将数据格式化输出

MongoDB Enterprise > db.students.find().pretty()

{
	"_id" : ObjectId("5fc7ac84e605e1d1bd365131"),
	"name" : "zhangsan",
	"age" : 20,
	"gender" : "man"
}
{
	"_id" : ObjectId("5fc7ac8ee605e1d1bd365132"),
	"name" : "lisi",
	"age" : "17",
	"gender" : "woman"
}
{
	"_id" : ObjectId("5fc7ac97e605e1d1bd365133"),
	"name" : "wangwu",
	"age" : "26",
	"gender" : "man"
}
{
	"_id" : ObjectId("5fc7aca3e605e1d1bd365134"),
	"name" : "zhaoliu",
	"age" : "20",
	"gender" : "man"
}
{
	"_id" : ObjectId("5fc7acaee605e1d1bd365135"),
	"name" : "lanqi",
	"age" : "12",
	"gender" : "woman"
}

db.集合名.findOne([query,是否显示此字段]),只查询一条数据,返回的数据格式是格式化之后的数据,所以,此方法不能使用pretty()

MongoDB Enterprise > db.students.findOne()
{
	"_id" : ObjectId("5fc7ac84e605e1d1bd365131"),
	"name" : "zhangsan",
	"age" : 20,
	"gender" : "man"
}

查询某一列去重后的数据

db.集合名.distinct(k)

MongoDB Enterprise > db.students.distinct("age")

[ "12", "17", "20", "26" ]

and的使用,多个条件以逗号分隔

db.集合名.find({“k1”:“v1”,“k2”:“v2”,…})

MongoDB Enterprise > db.students.find({"age":"20","name":"zhangsan"})

{ "_id" : ObjectId("5fc7ac84e605e1d1bd365131"), "name" : "zhangsan", "age" : "20", "gender" : "man" }

or条件的使用:$or

MongoDB Enterprise > db.students.find({"$or":[{"age":"20"},{"gender":"man"}]})

{ "_id" : ObjectId("5fc7ac84e605e1d1bd365131"), "name" : "zhangsan", "age" : "20", "gender" : "man" }
{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26", "gender" : "man" }
{ "_id" : ObjectId("5fc7aca3e605e1d1bd365134"), "name" : "zhaoliu", "age" : "20", "gender" : "man" }

限制查询:limit()

db.集合名.find().limit(n)

# 查询前3条数据
MongoDB Enterprise > db.students.find().limit(3)

{ "_id" : ObjectId("5fc7ac84e605e1d1bd365131"), "name" : "zhangsan", "age" : "20", "gender" : "man" }
{ "_id" : ObjectId("5fc7ac8ee605e1d1bd365132"), "name" : "lisi", "age" : "17", "gender" : "woman" }
{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26", "gender" : "man" }

略过数据查询:skip()

db.集合名.find().skip(n)

# 跳过前2条数据,从第3条数据开始查询
MongoDB Enterprise > db.students.find().skip(2)

{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26", "gender" : "man" }
{ "_id" : ObjectId("5fc7aca3e605e1d1bd365134"), "name" : "zhaoliu", "age" : "20", "gender" : "man" }
{ "_id" : ObjectId("5fc7acaee605e1d1bd365135"), "name" : "lanqi", "age" : "12", "gender" : "woman" }

分页查询

db.集合名.find().skip(n).limit(m)

# 跳过前两条数据,从第三条数据开始查询,查询2条数据
MongoDB Enterprise > db.students.find().skip(2).limit(2)

{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26", "gender" : "man" }
{ "_id" : ObjectId("5fc7aca3e605e1d1bd365134"), "name" : "zhaoliu", "age" : "20", "gender" : "man" }

模糊查询

db.集合名.find(“k”:/xxxx/)

# 查询名字中含有an两个字母的数据
MongoDB Enterprise > db.students.find({"name":/an/})

{ "_id" : ObjectId("5fc7ac84e605e1d1bd365131"), "name" : "zhangsan", "age" : "20", "gender" : "man" }
{ "_id" : ObjectId("5fc7ac97e605e1d1bd365133"), "name" : "wangwu", "age" : "26", "gender" : "man" }
{ "_id" : ObjectId("5fc7acaee605e1d1bd365135"), "name" : "lanqi", "age" : "12", "gender" : "woman" }