您当前的位置: 首页 >  mongodb
  • 0浏览

    0关注

    214博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MongoDB(一):安装+库文件的导入导出+主从复制

不愿透露姓名の网友 发布时间:2019-11-06 22:09:47 ,浏览量:0

文章目录
  • 一、MongoDB的介绍和安装
    • 1.介绍MongoDB
    • 2.安装MongoDB
  • 二、MongoDB的基本操作命令
    • 1.MongoDB对库的操作
    • 2.MongoDB对集合的基本操作
  • 三、MongoDB对数据的增删改查
    • 1.添加数据
    • 2.更新数据
    • 3.查询数据
    • 4.删除数据
  • 四、MongoDB中的一些常用方法
  • 五、MongoDB 聚合函数
    • 1.聚合框架中常用的几个管道操作
    • 2.聚合操作练习
  • 六、游标
  • 七、MongoDB的导入导出
    • 1.通用选项
    • 2.导出文件
    • 3.导入文件
    • 4.二进制bson文件的导入和导出
  • 八、Python操作MongoDB

一、MongoDB的介绍和安装 1.介绍MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

总结一下MongoDB的特点

  • MongoDB 是一个文档存储的数据库,操作起来比较简单和容易。
  • MongoDB安装简单。
  • MongoDB支持多种编程语言:PYTHON,JAVA,C++,PHP,C#等多种语言。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

MongoDB和传统的关系型数据库区别

  • 传统数据库特点是存储结构化数据,数据以行为单位,每行的数据结构和类型相同
  • MongoDB存储的是文档,每个文档得结构可以不相同
  • MongoDB的集合不需要提前创建,可隐式创建,而关系型数据库的表需要提前定义

MongoDB和MySQL中字段的区别

在这里插入图片描述

2.安装MongoDB

接下来我们进入安装环节(安装包及可视化包下载地址):

https://pan.baidu.com/s/1lYpk5GuE2Fw991Y7OiIr7Q
提取码:6un6

开始安装:

1.指定安装路径

D:\MongoDB\Server\3.4

2.path中配置环境变量

D:\MongoDB\Server\3.4\bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3W4IOgv-1573040695146)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1572937582549.png)] 添加环境变量MONGO_HOME

变量名:MONGO_HOME
变量值:D:\MongoDB\Server\3.4

在这里插入图片描述 3.创建一个文件存放数据库的文件夹db和一个logs文件夹

D:\MongoDB\Server\3.4\data\db

D:\MongoDB\Server\3.4\data\logs

4.将MongoDB配置成一个服务

以管理员方式开启cmd并进入MongoDB的bin文件夹下,输入命令:
d:
cd D:\MongoDB\Server\3.4\bin

再运行配置服务的命令:
mongod --bind_ip 0.0.0.0 --logpath D:\MongoDB\Server\3.4\data\logs\mongo.log --logappend --dbpath D:\MongoDB\Server\3.4\data\db --port 27017 --serviceName "MongoDB" -serviceDisplayName "MongoDB" --install

5.启动服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Syowdltp-1573040695150)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1572939115156.png)] 6.启动

  • 开启服务器: mongod --dpath 数据存放的文件夹

  • 开启客户端:

    mongodb://[用户名:密码@]主机地址1[:端口号] 默认不填写为链接本地 例如:使用用户名fred,密码foobar登录localhost的admin数据库 mongodb://fred:foobar@localhost

在这里我们输入以下命令开启

打开cmd,命令行启动
mongod --dbpath D:\MongoDB\Server\3.4\data\db

再打开一个cmd
mongod

在这里插入图片描述

二、MongoDB的基本操作命令 1.MongoDB对库的操作

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

------------------创建数据库(数据库不存在为创建,存在即切换到指定数据库。)
use 库名

------------------查看当前所在的数据库
db

-----------------查看所有数据库(当创建库,但是库中没数据,则库不会被显示,除非插入数据)
show dbs


------------------删除数据库(先使用该库)
use 库名
db.dropDatabase()
2.MongoDB对集合的基本操作

进入指定库后,可以对集合(表)进行一些操作

1创建空集合

db.createCollection(集合名字, 可选参数)

可选参数:

  • capped(可选,布尔类型):如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
  • size(可选,数值):为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
  • max(可选,数值):指定固定集合中包含文档的最大数量。

2.隐式创建集合

# 直接向不存在的集合插入数据,会自动创建集合
db.集合名字.insert({'name':'张三'})

3查看已有集合

show collections
或者
show tables

3.4删除集合

db.collection.drop() # 删除成功返回true
三、MongoDB对数据的增删改查 1.添加数据

①insertone()插入一条数据

db.集合名.insertone()

# 举例:
db.test.insertone( { item: "card", qty: 15 } );

② insertMany()插入多条数据

db.test.insertMany()


# 举例:
db.test.insertMany([
    { item: "card", qty: 15 },
    { item: "envelope", qty: 20 },
    { item: "stamps", qty:30 }
]);

③ insert()插入一条或者多条

db.集合名字.insert(数据)

# --------------------------------举例:插入一条数据
db.test.insert( { item : "card", qty : 15 })

db.test.find()  # 先查看一下结果 
  
{"_id":Objectlid("5bacac84bb5e8c5dff78dc21"), "item":"cardn, "qty":15 }


# -----------------------------举例:插入多条数据
db.test.insert(
        [
            { _id: 11, item: "pencil", qty: 50, type: "no.2" },
            { item: "pen", qty: 20 },
            { item: "eraser", qty: 25 }
        ]
     )
    
db.test.find()

{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" }
{ "_id" : Objectld("5bacf31728b746e917e06b27"), "item" : "pen", "qty" : 20 }
{ "_id" : Objectld("5bacf31728b746e917e06b28"), "item" : "eraser", "qty" : 25 }

注意:

  • 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

  • 插入多条时候,有序插入命令

    > db.test.insert([
            {_id:10, item:"pen", price:"20" },
            {_id:12, item:"redpen", price: "30" },
            {_id:11, item:"bluepen", price: "40" }
        ],
        {ordered:true}
    )
    

    在设置 ordered:true 时,插入的数据是有序的,如果存在某条待插入文档和集合的某文档 _id 相同的情况,_id 相同的文档与后续文档都将不再插入。在设置 ordered:false 时,除了出错记录(包括 _id 重复)外其他的记录继续插入。

2.更新数据

update函数参数说明:

db.collection.update(
   ,  # update的查询条件,类似sql update查询内where后面的。
   , # update的对象和一些更新的操作符(如$,$inc...)等,可以理解为sql update查询内set后面
   {
     upsert: ,# 可选参数,如果不存在update的记录,插入新对象,默认是false,不插入。
     multi: ,  # 可选, 默认是false,只更新找到的第一条记录,true为按条件查找并全部更新
     writeConcern:  # 可选,抛出异常的级别。
   }
)

2.1 set关键字

添加数据

> db.test2.insert({'name':'张三','age':12})
WriteResult({ "nInserted" : 1 })

使用set关键字,修改name为李四

> db.test2.update({'name':'张三'},{$set:{'name':'李四'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

# 查询该条数据,成功修改
> db.test2.find()                      
{ "_id" : ObjectId("5f645e811e1dd14f99674e07"), "name" : "李四", "age" : 12 }

倘若不加set,修改李四名字为王五

> db.test2.update({'name':'李四'},{'name':'王五'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

查询所有数据,发现没有{‘name’:王五’,‘age’:12}的数据,只有{‘name’:王五’},说明不加入set不是修改,而是替换

> db.test2.find()                             
{ "_id" : ObjectId("5f645e811e1dd14f99674e07"), "name" : "王五" }

2.2 unset关键字

添加数据

> db.test2.insert({'name':'张三','age':12})
WriteResult({ "nInserted" : 1 })

使用unset关键字,name字段

> db.test2.update({'name':'张三'},{$unset:{'name':'张三'}})

# 查询该数据,成功删除name字段
> db.test2.find()        
{ "_id" : ObjectId("5f6460e41e1dd14f99674e08"), "age" : 12 }

2.3 rename关键字

原始数据

> db.test2.find()        
{ "_id" : ObjectId("5f6460e41e1dd14f99674e08"), "age" : 12 }

使用rename,将age字段修改为num

> db.test2.update({'age':12},{$rename:{'age':'num'}})

# 成功修改字段
> db.test2.find()
{ "_id" : ObjectId("5f6460e41e1dd14f99674e08"), "num" : 12 }

2.4 inc关键字

原始数据

> db.test2.find()
{ "_id" : ObjectId("5f6460e41e1dd14f99674e08"), "num" : 12 }

使用inc关键字,可以增加一个字段

> db.test2.update({'num':12},{$inc:{'sex':1}})
# 成功添加字段
> db.test2.find()
{ "_id" : ObjectId("5f6460e41e1dd14f99674e08"), "num" : 12, "sex" : 1 }

2.5 其他可选参数

multi修改多条,修改name为张三的所有人的年龄为21

db.user.update({'name':'张三'},{$set:{'age': 21}},{multi:true})

upsert查询到数据则修改,查询不到则将数据添加,但是注意查询条件不会被添加到数据字段

db.stu.update({'name':'zs'},{$set:{'name':'ls'}},{upsert:true});
# 如果name为zs的数据不存在,则会自动添加一条{'name':'ls'}的数据
3.查询数据

基本函数

db.集合名.find(查询条件)

# 将查询的数据格式化展示
db.集合名.find(查询条件).pretty()

3.1 条件操作符语法

操作格式范例sql中的类似语句={:}db.col.find({"by":"菜鸟教程"}).pretty()where by = '菜鸟教程'{:{$lt:}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50<={:{$lte:}}db.col.find({"likes":{$lte:50}}).pretty()where likes 50>={:{$gte:}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50!={:{$ne:}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50

3.2 逻辑查询语法

and语法:符合多个条件

db.集合名.find({查询条件1},{查询条件2},{查询条件3}...)
或者
db.集合名.find({$and:[{查询条件1},{查询条件2}]})

or语法:符合条件1或符合条件2

db.集合名.find({$or:[{查询条件1},{查询条件2}]})

nin语法:不符合数值1或数值2的

db.集合名.find({字段名:{$nin:[值1,值2,值3...]}}) 

3.3 查询示例

要求代码查看所有db.stu.find()查看name=zsdb.stu.find({‘name’:‘zs’})查看name!=zs的db.stu.find({‘name’:{$ne:‘zs’}})查看name=zs并且age=12db.stu.find({‘name’:‘zs’},{‘age’:12})年龄不在15,16,17的都显示db.stu.find({‘age’:{$nin:[15,16,17]}})年龄在15,16,17的都显示db.stu.find({‘age’:{$in:[15,16,17]}})存在age字段的都显示db.stu.find({‘age’:{$exists:1}})不存在age字段的都显示db.stu.find({‘age’:{$exists:0}})查询年龄=30岁的数据db.stu.find({age:30})查询年龄>30岁的数据db.stu.find({age:{$gt:30}})查询年龄>=30岁的数据db.stu.find({age:{$gte:30}})查询年龄
关注
打赏
1657102503
查看更多评论
立即登录/注册

微信扫码登录

0.0406s