# 操作数据库

# 创建数据库

一个 mongodb 中可以建立多个数据库。MongoDB 的默认数据库为 "db",该数据库存储在 data 目录中。

MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME
>	use shsxt
switched to db shsxt
>	db shsxt

注:如果数据库不存在,则创建数据库,否则切换到指定数据库。

# 查询数据库

执行 "db" 命令可以显示当前数据库对象或集合,若想想查看所有数据库,可以使用 show dbs 命令:

>	show dbs 
admin	0.000GB 
config	0.000GB 
local	0.000GB

如上图,我们可以看到刚创建的 shsxt 数据库并不在数据库列表中,若想显示它,我们需要向 shsxt 数据库插入文档。

>	db.table1.insert({"name":"上海尚学堂"}) 
WriteResult({ "nInserted" : 1 })
>	show dbs 
admin	0.000GB 
config	0.000GB 
local	0.000GB 
table1	0.000GB

table1 是数据库表集合

# 删除数据库

MongoDB 删除数据库的语法格式如下:
默认删除当前数据库,你可以使用 db 命令查看当前数据库名。

db.dropDatabase()
>	db shsxt
>	db.dropDatabase()
{ "dropped" : "shsxt", "ok" : 1 }
>	show dbs 
admin	0.000GB 
config	0.000GB 
local	0.000GB

# 操作集合

# 创建集合

db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>})
  • name 是要创建的集合的名称,options 是一个文件,用于指定配置的集合。
  • name: 是要创建的集合的名称
  • capped: 是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
  • size: 限制集合使用空间的大小,默认为没有限制
  • max: 集合中最大条数限制,默认为没有限制
  • autoIndexId: 是否使用_id 作为索引,默认为使用 (true 或 false) size 的优先级比 max 要高
>	db.createCollection("shsxt")
{ "ok" : 1 }
>	show collections shsxt

注:在 MongoDB 中不需要创建集合,在创建文档时会自动创建集合

# 方式一:
db.table1.insert({"a":1}) # 当第一个文档插入时,集合就会被创建并包含该文档
# 方式二:
db.table2 # 创建一个空集合
# 空集合不会在 Robo 3t 上显示出来

# 删除集合

MongoDB 删除集合的语法格式如下:

db.COLLECTION_NAME.drop()
>	db.shsxt.drop() 
true
>	show collections # 显示所有集合
>

# 操作文档

# 插入文档

# insert()

user0 = {
    "name":"zhangsan", 
    "age":18,
    "hobbies":["music", "read"], "addr":{
        "country":"China",
        "city":"BJ"
    }
}
db.user.insert(user0)

注:_id 字段,这个值必须在 user 集合中唯一,若不指定主键值,会自动分配一个值。

# save()

插入文档你可以使用 db.test.save(document) 命令。如果不指定 _id 字段 save ()
方法类似于 insert () 方法。如果指定 _id 字段,则会更新该 _id 的数据。

user1 = {
    "_id":"2",
    "name":"lisi", "age":20,
    "hobbies":["music", "read"], "addr":{
        "country":"China",
        "city":"BJ"
    }
}
db.user.save(user1)

# 批量插入

user1 = {
"_id":1, "name":"zhangsan", "age":1,
"hobbies":["music", "read"], "addr":{
"country":"China",
"city":"BJ"
}
}
user2 = {
"_id":2, "name":"lisi", "age":2,
"hobbies":["music", "read"], "addr":{
"country":"China",
"city":"SH"
}
}
user3 = {
"_id":3, "name":"wangwu", "age":3,
"hobbies":["music", "read"], "addr":{
"country":"China",
"city":"GZ"
}
}
user4 = {
"_id":4, "name":"zhaoliu", "age":4,
"hobbies":["music", "read"], "addr":{
"country":"China",
"city":"SZ"
}
}
user5 = {
"_id":5, "name":"tianqi", "age":5,
"hobbies":["music", "read"], "addr":{
"country":"China",
"city":"TY"
}
}
db.user2.insertMany([user1, user2, user3, user4, user5])

# 更新文档

MongoDB 使用 update () 和 save () 方法来更新集合中的文档,我们详细来看下 update 的应用,上一节已经介绍过 save () 方法。

update () 方法用于更新已存在的文档。语法格式如下:

db.user.update(<query>, <update>)

参数说明:

  • query : update 的查询条件,类似 sql update 查询内 where 后面的。
  • update : update 的对象和一些更新的操作符(如,,inc...)等,也可以理解为 sql update 查询内 set 后面的
user2 = {
"name":"wangwu", "age":20,
"hobbies":["music", "read"], "addr":{
"country":"China",
"city":"BJ"
}
}
# 查找到的匹配数据如果是多条,只会修改第一条。
db.user.update({"name":"lisi"}, user2)	# 修改单条等价于 updateOne () 
# 查找到的匹配数据如果是多条,修改所有匹配到的记录。
db.user.updateMany({"name":"lisi"}, user2)	# 修改多条

注:比如修改的值只有 name,age 其余属性会被删除
$inc

# 增加和减少 $inc # 年 龄 都 -1 db.user.update (
{},
{"$inc":{"age":-1}},
{"multi":true}
)
# 年 龄 都 +10 db.user.update (
{},
{"$inc":{"age":10}},
{"multi":true}
)

# 删除文档

MongoDB remove () 函数是用来移除集合中的数据,其语法格式如下所示:

db.user.remove(<query>, {justOne: <boolean>})

参数说明:

  • query:(可选)删除的文档的条件。
  • justOne :(可选)如果设为 true,则只删除一个文档,False 删除所有匹配的数据等价于
    db.user.deleteOne (<query>):删除符合条件的第一个文档
db.user.remove({"name":"lisi"}, {justOne: true})
db.user.deleteOne({"name":"lisi"})

删除所有数据命令:

db.user.remove({})
# 等价于
db.user.deleteMany({}) # 等于是清空该集合(表)
# 有嵌入文档,且内容含有 "country":"China" 的全都删除
db.user.deleteMany( {"addr.country":"China"} ) 
# 删除 id 大于等于 3 的所有
db.user.deleteMany({"_id":{"$gte":3}})
# 删除所有
db.user.remove({}) 
db.user.deleteMany({})

# 查询文档

# 查询所有

MongoDB 查询数据的语法格式如下:

db.user.find()	# 等同于 db.user.find ({}) # 去 重
db.user.distinct('name')

find () 方法以非结构化的方式来显示所有文档。
如果你需要以易读的方式来读取数据,可以使用 pretty () 方法,语法格式如下:

db.user.find().pretty()

pretty () 方法以格式化的方式来显示所有文档

# 比较运算

=,!= ('ne)>(ne') ,> ('gt') ,< ('lt)>=(lt') ,>= ('gte') ,<= ('$lte')

#1、select * from user where id = 3 
db.user.find({"_id":3})
#2、select * from user where id != 3 
db.user.find({"_id":{"$ne":3}})
#3、select * from user where id > 3 
db.user.find({"_id":{"$gt":3}})
#4、select * from user where age < 3 
db.user.find({"age":{"$lt":3}})
#5、select * from user where id >= 3 
db.user.find({"_id":{"$gte":3}})
#6、select * from user where id <= 3 
db.user2.find({"_id":{"$lte":3}})

# 逻辑运算

MongoDB 中字典内用逗号分隔多个条件是 and 关系,或者直接用andand,or,$not(与或非)

#逻辑运算:$and,$or,$not
#1 select * from user where id >=3 and id <=4; 
db.user.find({"_id":{"$gte":3,"$lte":4}})
#2 select * from user where id >=3 and id <=4 and age >=4; 
db.user.find({
"_id":{"$gte":3,"$lte":4}, "age":{"$gte":4}
})
db.user.find({ "$and": [{"_id": {"$gte":3, "$lte":4}},{"age": {"$gte":4}}]})
#3 select * from user where id >=0 and id <=1 or id >=4 or name = "tianqi"; 
db.user.find({$or: [{"_id": {$gte:0, $lte:1}},{"_id": {$lte:4}},{"name": "tianqi"}]})
#4 select * from user where id % 2 = 1; 
db.user.find({"_id":{"$mod":[2,1]}})
#上一条取反
db.user.find({"_id":{"$not":{"$mod":[2,1]}}})

# 成员运算

成员运算无非 in 和 not in,MongoDB 中形式为 $in , $nin

#1、select * from user where age in (1,2,3); 
db.user.find({"age":{"$in":[1,2,3]}})
#2、select * from user where name not in ("zhangsan","lisi"); 
db.user.find({"name":{"$nin":["zhangsan","lisi"]}})

# $type 操作符

MongoDB 中可以使用的类型如下表所示:

# 查询 name 是字符串类型的数据
db.user.find({name:{$type:2}}).pretty()

# 正则

正则定义在 // 内

#1、select * from user where name regexp '^z.*?(u|i)$'; #匹配规则:z 开头、n 或 u 结尾,不区分大小写
db.user.find({'name':/^z.*?(n|u)$/i})

# 投影

MongoDB 投影意思是只选择必要的数据而不是选择一整个文件的数据。
在 MongoDB 中,当执行 find () 方法,那么它会显示一个文档所有字段。要限制这一点, 需要设置的字段列表值 1 或 0。
1 用来显示字段而 0 是用来隐藏字段,_id 会默认显示出来。

#1 、 select name,age from user where id=3; 
db.user.find({'_id':3},{'_id':0,'name':1,'age':1})
#2、select name,age from user where name regexp "^z.*(n|u)$"; 
db.user.find({"name":/^z.*(n|u)$/i},{"_id":0,"name":1,"age":1})

# 数组

#查询数组相关
#查 hobbies 中有 dancing 的人
db.user.find({ "hobbies":"dancing"})
#查看既有 dancing 爱好又有 tea 爱好的人
db.user.find({ "hobbies":{"$all":["dancing","tea"]}})
#查看索引第 2 个爱好为 dancing 的人
db.user.find({ "hobbies.2":"dancing"})
#查看所有人的第 1 个到第 3 个爱好,第一个 {} 表示查询条件为所有,第二个是显示条件
db.user.find({},
{
"_id":0,
"name":0,
"age":0,
"addr":0, "hobbies":{"$slice":[0,2]},
}
)
#查看所有人最后两个爱好,第一个 {} 表示查询条件为所有,第二个是显示条件
db.user.find({},{"_id":0,"name":0,"age":0,"addr":0, "hobbies":{"$slice":-2},})
#查询子文档有 "country":"China" 的人
db.user.find({"addr.country":"China"})

# 排序

在 MongoDB 中使用使用 sort () 方法对数据进行排序,sort () 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 - 1 是用于降序排列。

# 按姓名正序 db.user.find ().sort ({"name":1}) # 按年龄倒序 按 id 正序
db.user.find().sort({"age":-1,'_id':1})

# 索引

# 创建索引

索引通常能够极大的提高查询的效率,MongoDB 使用 ensureIndex () 方法来创建索引, 其基本语法格式如下所示:

db.COLLECTION_NAME.ensureIndex({KEY:1})

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,-1 则为按降序来创建索引

db.user2.ensureIndex({"name":-1})

我们可以指定所建立索引的名字,如下所示:

db.user.ensureIndex({"name":1},{"name":"nameIndex"})

ensureIndex () 接收可选参数,可选参数列表如下

# 查询索引

查询索引的语法格式如下所示:

db.COLLECTION_NAME.getIndexes()
db.user.getIndexes()

也可以在可视化工具中添加索引

# 删除索引

删除索引的语法格式如下所示:

db.COLLECTION_NAME.dropIndex(INDEX_NAME) 
db.user.dropIndex("nameIndex")






更新于

请我喝[茶]~( ̄▽ ̄)~*

yuan 微信支付

微信支付

yuan 支付宝

支付宝

yuan 贝宝

贝宝