MongoDB的简介及安装

MongoDB的简介及安装

最近需要使用到mongodb数据库,所以就进行了相应的安装与使用
在安装过程中遇到了许多问题

简介
  • MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

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

安装与环境配置
  1. 下载地址:https://www.mongodb.com/download-center/community?jmp=nav
    在这里插入图片描述

  2. 下载完成后,双击安装
    在这里插入图片描述
    点击next
    在这里插入图片描述

  3. 第一个选项是:Complete(完整版),默认安装所有功能到C盘,第二个选项是Customer(自定义),可以选择安装目录与服务。
    强烈建议选择Complete,安装在默认C盘位置,我安装了许多次,安装在其他盘都会出一些问题,但可能是我的电脑的原因

  4. 然后next
    在这里插入图片描述

  5. 把左下角的√去掉,不然会安装很慢,这里安装的是可视化图形界面,后面再讲
    在这里插入图片描述

然后等待安装完成

  1. 打开安装路径下的bin目录

在这里插入图片描述

  1. 环境配置
  • 创建D:\MongoDB_Data\data目录
  • 创建D:\mongodb\data\db目录,用来存放数据库数据,
  • 创建D:\MongoDB_Data\data\log目录,用来存放日志文件;
  • 在D:\MongoDB_Data\data\log目录里新建mongodb.log,用来存放日志信息;
  • 并在目录D:\MongoDB_Data下创建mongo.config,在文件内部复制如下文本:
##数据文件  此处=后对应到数据所存放的目录
dbpath=D:\MongoDB_Data\data\db
##日志文件  此处=后对应到日志文件所在路径
logpath=D:\MongoDB_Data\data\log\mongodb.log
##错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
logappend=true 
#启用日志文件,默认启用
journal=true 
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true 
#端口号 默认为27017
port=2701
  1. 测试安装是否成功
    方法一:
    进入目录C:\Program Files\MongoDB\Server\4.2\bin下,双击mongod.exe,如果闪一下就退出,说明安装成功
    方法二:
    打开浏览器,输入http://localhost:27017/,出现如下界面即安装成功
    在这里插入图片描述

  2. 安装服务

先进入C:\Program Files\MongoDB\Server\4.2\bin文件夹

cd C:\Program Files\MongoDB\Server\4.2\bin

使用如下命令:

mongod --config D:\MongoDB_Data\mongo.config --install --serviceName "MongoDB"

在这里插入图片描述

在cmd.exe上输入services.msc打开服务管理器,找到MongoDB服务,设置成自动启动,并启动
在这里插入图片描述

  1. 配置环境变量
  • 如果不配置环境变量可进入C:\Program Files\MongoDB\Server\4.2\bin,然后把mongo.exe发送桌面作为快捷方式
  • 还可以通过设置环境变量的方式,让mongo命令在所有文件夹内都可以访问

在这里插入图片描述

  1. 检验是否设置成功

在cmd.exe上输入mongo
在这里插入图片描述

可视化图形界面的安装

Robo 3T以及Studio 3T下载地址:
https://robomongo.org/
MongoBooster 下载地址:
https://www.softpedia.com/get/Internet/Servers/Database-Utils/MongoBooster.shtml

我安装了Robo 3T以及Studio 3T
在这里插入图片描述
在这里插入图片描述

安装很简单,下载后解压,安装自己需要的即可

在这里插入图片描述
在这里插入图片描述

可以看到界面十分友好,操作也十分简单
在这里插入图片描述

然后使用pymongo简单的操作了数据库

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")   # 创建一个连接

# 创建数据库,类似字典引用
mydb = myclient["first_mongodb"]

# 创建collection
collection = mydb["first_collection"]

# 注意MongoDB是惰性的,即在插入第一条数据之前,数据库和collection都不会真的生成

# 插入一条文档,文档在MongoDB中的存储格式是json,在pymongo中我们一般传入字典
dic = {'name': 'serena', "id": 1532}
collection.insert_one(dic)

collist = mydb.list_collection_names()
dblist = myclient.list_database_names()
print(collist)
print(dblist)

# ['first_collection']
# ['admin', 'config', 'first_mongodb', 'local', 'tan']
深入学习
  1. 一些必须掌握的命令
mongo   
运行mongo

db	
显示当前的数据库名称

show dbs	
显示当前服务器下数据库(非空的数据库)列表

use test	
如果test数据库不存在,则创建test数据库
如果test已存在,则切换到test数据库

show collections	
显示当前数据库下所包含的集合(表)列表

db.users.insert({name:'zhangsha'})	
向users集合中插入数据
如果users集合存在,则直接插入数据,如果不存在,则创建users集合再插入数据

db.createCollection('products')
创建一个空集合products

db.products.insert([{name:'lishi'},{name:'wangwu'}])		
一次插入多个数据

db.products.find()
查询products集合中所有的数据

db.products.find({name:'苹果手机'})
查询stu集合中name='苹果手机'的数据

db.products.find({name:{$eq:'苹果手机'}})
同上,$eq=>等号,建议使用上面的方式,易记,易输入
eq = equal

db.products.find({price:{$gt:18}})
查询stu集合中age>18的数据  
 
把$gt换成如下的符号试试:
$gt=>大于   great
$gte=>大于等于 great equal
$lt=>小于   less than
$lte=>小于等于 less than equal
$ne=>不等于  not equal
$in=>在范围内
$nin=>不在范围内
以上几个符号格式总结为:{ field: {符号: value}}

db.products.find({name:/^华为/})
查找stu集合中name域中以“华为”字符的开头的数据

db.products.find({name:{$in:['手机1','手机2']}})
查询stu集合中name='手机1'和name='手机2'的数据
$in=>在范围内
$nin=>不在范围内
以上两个符号格式为:{ field:{符号:[value1,value2,....]}}

db.products.find({name:"华为手机",price:800})
查找name="华为手机"并且price:800的数据

db.products.find({$or:[{name:'华为手机'},{price:{$lt:1000}}]})
查询products集合中name='华为手机' 或者 price<1000的数据
$or=>或者  注意$or:[{},{},....]
$and=>并且  格式同$or, 例:{$and:[{},{},....]}
$nor=>not or 与$or相反, 格式同$or

db.products.find({price:{$not:{$gt:100}}})
查询products集合中price<=100的数据,不存在price属性的数据也会查询出来
$not=>取反 

db.products.find({price:{$exists: true}})
查询products集合中包含域名称为price的数据

db.products.find({name:{$type:2}})
查询products集合中name属性为字符串类型的数据

db.products.find({
	$where: function(){
		return this.name == '华为手机'
	}
})
查询products集合中name='华为手机’的数据

db.products.find({
	$where: function(){
 		return  this.name.indexOf('华为手机') > -1;
	}
})
查询products集合中name域中包含“华为手机”字符的数据

db.products.update({name:'华为手机'},{$set:{price:2000}},{
	upsert: true,
	multi:false
})
把products集合中name='华为手机'的那条数据,把price属性设置成2000,其它属性保留
$set是指更改的属性列表,不在列表中其他属性会被保留,如果不加此符号,其它属性会被丢弃(_id属性比较特殊,不会丢失)
upsert:true如果没有符号条件的更新时,则插入一条,为false时,则不会插入, 默认是false
multi:false一次只能更新一条数据,为true时,可更新多条,默认是false

db.students.remove({})
清空集合students

db.products.remove({name:'abc'})
删除products集合中name='abc'的数据,注意,即使把集合products中的所有数据都删除了
products集合仍然存在, remove()是用来删除数据的,而drop()不仅会删除数据,还会把
集合的结构给删除

db.products.drop()
把stu集合彻底从当前数据中删除,集合stu不再存在,注意与remove()的区别

db.dropDatabase()
删除当前数据库

db.users.distinct('name')
查询users集合中不重复的name属性,返回的是数组

db.stu.count({name:'zhangshan'})
查询stu集合中name='zhangshan'的数据数量

db.stu.find().limit(5)
查询stu集合中前5条数据

db.stu.find().skip(5)
查询stu集合中跳过前5条后的数据

db.stu.find().sort({name:1})
查询stu集合中的全部数据,并按name属性正序排列  注:1:正序 -1: 倒序

由于mongodb的api接口方法很多,除以上命令外,其他的命令请多看官方文档
  1. 继续学习
发布了60 篇原创文章 · 获赞 6 · 访问量 7765

猜你喜欢

转载自blog.csdn.net/qq_44205272/article/details/103365126