MongoDB 数据库操作

一、MongoDB 数据库操作

1、创建数据库

use 命令表示切换数据库,如果数据库不存在会创建数据库。
use 数据库名

2、显示数据库

通过 show dbs 或 show databases 查看数据库

注意

1.不同的角色看见的数据库时不一样的,管理员看见所有数据库,普通用户只能看见自己的数据库
2.创建新的数据库里面没有数据时,通过 show dbs 或 show databases 是无法查看到的。需要向数据库新增一个 document(db.test.insert({"key":"value","key2":"value2"})),才能看到

3、删除数据库

删除数据库需要切换到需要删除的数据库中,且登录用户具有 dbAdminAnyDatabase 权限,执行 db.dropDatabase()。

use test
db.dropDatabase()

二、MongoDB 集合操作

1、创建集合

MongoDB 中的集合是一组文档的集,相当于关系型数据库中的表。
MongoDB 使用 db.createCollection()函数来创建集合
语法格式:db.createCollection(name,options)
name:要创建的集合名称
options:可选参数,指定有关内容大小及索引的选项

MongoDB 数据库操作

MongoDB 其实不需要显式的去创建集合,当使用
use test
db.table1.insert()
就能隐式的创建 table1 集合

创建一个默认选项的集合命令如下:

>db.createCollection("c1")
{"ok":1}
>db.c1.insert("a":"1")
>show tables
c1
>
# 方式一:
db.c2.insert({"a":"1"}) # 当第一个文档插入时,集合就会被创建,并包含该文档
# 方式二:
db.c3 # 创建一个空集合,里面没有数据时通过 show tables 或 show collections 是无法查看到的。需要向集合插入一个文档才能看见。

2、查看集合

通过 show tablesshow collections 查看所有集合

> show tables;
user
> db.c1.insert({"a":1})
WriteResult({ "nInserted" : 1 })
> show tables;
c1
user
> show collections
c1

通过 db.COLLECTION_NAME.stats()查看集合详情

>db.c3.stats()

3、删除集合

通过 db.COLLECTION_NAME.drop()删除集合

> show collections
c1
user
> db.c1.drop()
true
> show collections
user
> 

三、Document 操作

1、插入文档

1.1、单条插入

可以使用 insert/insertOne/save插入单条文档:

  • db.c1.insert({“name”:”a”})
  • db.c1.insertOne({“name”:”a”})
  • db.c1.save({“name”:”a”})
1.1.1、insert

通过 db.COLLECTION_NAME.insert(document)插入文档。
插入文档时如果没有指定_id则默认为OjectId类型,_id不能重复,且在插入后不可变

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

MongoDB 数据库操作

MongoDB 数据库操作

1.1.2、insertOne

在 mongoDB 3.2 版本后提供了insertOne()函数用于插入单条文档

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

MongoDB 数据库操作

1.1.3、save

插入文档也可以使用 db.COLLECTION_NAME.save(document)命令
如果不指定_id字段save()方法等同于insert()方法。如果指定_id字段,则变为更新文档操作

user3 = {
    "_id":"3",
    "name":"wangwu",
    "age":22,
    "hobbies":["music","read"],
    "addr":{
        "country":"China",
        "city":"JS"
    }
}
db.user.save(user3)

1.2、批量插入

可以使用 insert/insertMany/save插入多条文档。区别在于把单条插入时函数的对象类型{}变成数组类型[{},{}]:

  • db.c1.insert([{name:"a"},{name:"b"}])
  • db.c1.insertMany([{name:"a"},{name:"b"}])
  • db.c1.save([{name:"a"},{name:"b"}])
1.2.1 insert
user1 = {
    "_id":1,
    "name":"zhangsan",
    "age":22,
    "hobbies":["music","read"],
    "addr":{
        "country":"China",
        "city":"JS"
    }
}

user1 = {
    "_id":2,
    "name":"lisi",
    "age":22,
    "hobbies":["music","read"],
    "addr":{
        "country":"China",
        "city":"NJ"
    }
}
...
db.user.insert([user1,user2,user3,user4,...])
1.2.2 save
db.user.insertMany([user1,user2,user3,user4,...])
1.2.3 save
db.user.save([user1,user2,user3,user4,...])

2、更新文档

2.1、update 函数

通过 update系列函数或者 save函数可以更新集合中的文档。我们来详细看下update函数的使用。

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

db.COLLECTION_NAME.update(query,update,options)
  • query: update 的查询条件,类似 SQL update 语句中 where 部分
  • update: updte 的对象和一些更新的操作符(如$,Sinc…)等,也可以理解为 SQL update 语句总的 set 部分
  • upsert: 可选,如果不存在 update 的文档,是否插入该文档。true为插入,默认为false,不插入
  • multi: 可选,是否批量更新。true 表示按条件查询出来的多条记录全部更新,false 只更新找到的第一条记录,默认是false
user = {
    "name":"wangwu",
    "age":20,
    "hobbiess":["mucis","read"],
    "addr":{
        "country":"China",
        "city":"BJ"
    }
}

# 修改单条
db.user.updateOne({"name":"lisi"},user)
# 查到到的匹配数据如果多条,只会修改第一条
db.user.update({"name":"lisi",user}) # 修改单条等价于 updateOne()
# 查到到的匹配数据如果多条,修改所有匹配的数据
db.user.update({"name":"lisi"},{"$set":user},false,true) # 修改多条
db.user.updateMany({"name":"lisi"},{"$set":user}) #  修改多条

注意:更新文档是整个文档的操作,如果修改的值只有 name 和 age,除了 _id以外的其它属性将会被删除

2.2、更新操作符

2.2.1、$set 操作符
# 更新
db.user.update({"name":"zhangsan"},{$set:{age:18}},{multi:true})
2.2.2、$inc 操作符
# 年龄加5
db.user.update({"name":"wangwu"},{$inc:{age:5}})
2.2.3、$unset 操作符
# 用来删除键,让键的值为空,在编写命令时$unset里field取值任意,无论给什么值都表示删除
db.user.update({name:"wangwu"},{$unset:{address:"随意"}})
2.2.4、$push 操作符
# 向文档某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,要求键值类型必须时数组;键不存在,则创建数组类型的键
db.user.update({},{$push:{hobby:"写代码"}},{multi:true})
2.2.5、$pop 操作符
# 删除数据元素,可取的值只能是 1-11表示尾部删除,-1表示头部删除
# 删除 hobby 中第一个元素。其中 $pop 中的 key 是要操作的数组类型属性
db.user.update({"name":"lisi"},{$pop:{hobby:-1}})
2.2.6、$pull 操作符
# 从数组中删除满足条件的元素,只要满足条件都删除
db.user.update({name:"wangwu"},{$pull:{hobby:"test"}})
2.2.7、$pullAll 操作符
# 可以设置多个条件
db.user.update({name:"wangwu"},{$pull:{hobby:["test1","test2"]}})
2.2.8、$rename
# 对键进行重命名,任何类型的键都能重命名
db.user.update({name:"wangwu"},{$rename:{name:"username"}})

3、删除文档

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

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

3.2、删除所有数据命令:

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({})
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!