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 其实不需要显式的去创建集合,当使用
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 tables 或 show 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)

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)
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 或 -1。1表示尾部删除,-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 协议》,转载必须注明作者和本文链接
 
           HuDu 的个人博客
 HuDu 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号