当前位置:首页 » 《随便一记》 » 正文

【小沐学数据库】MongoDB下载、安装和入门(Python)

17 人参与  2024年02月10日 08:26  分类 : 《随便一记》  评论

点击全文阅读


文章目录

1、简介2、下载和安装2.1 平台支持2.2 MongoDB Community Server2.3 MongoDB Shell2.4 MongoDB Compass2.5 pymongo库 3、概念3.1 数据库3.2 文档(Document)3.3 集合(Collection)3.4 元数据3.5 数据类型 4、Python代码测试4.1 连接数据库4.2 指定数据库和集合4.3 插入数据4.4 删除数据4.5 修改数据4.6 查询数据 结语

1、简介

MongoDB是一个文档数据库,旨在简化应用程序 开发和扩展。

官网地址:
https://www.mongodb.com/

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

在这里插入图片描述

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 数据库主要用于海量存储,常被用在数据采集项目中。数据存储不需要固定模式,不需要多余操作就可以横向扩展,低成本,没有复杂的关系,安装简单,支持各种编程语言等。

2、下载和安装

2.1 平台支持

MongoDB 6.0 Community Edition 支持以下 64 位版本的 Windowsx86_64。
MongoDB仅支持这些平台的64位版本。

Windows Server 2019Windows 10 / Windows Server 2016

2.2 MongoDB Community Server

MongoDB有两个服务器版本: 社区版和商业版。
其中社区版又分为如下几种:

在 Linux 上安装
安装 MongoDB 社区版和所需的依赖项 Linux。 Install MongoDB Community Edition on Red Hat or CentOSInstall MongoDB Community Edition on UbuntuInstall MongoDB Community Edition on DebianInstall MongoDB Community Edition on SUSEInstall MongoDB Community Edition on Amazon Linux 在 macOS 上安装
从MongoDB在macOS系统上安装MongoDB社区版 档案。 Install MongoDB Community Edition on macOS 在Windows上安装
在Windows系统上安装MongoDB社区版,并 (可选)将MongoDB作为Windows服务启动。 Install MongoDB Community Edition on Windows 使用 Docker 安装
安装 MongoDB Community Docker 容器。 Install MongoDB Community with Docker

这里以Windows为例说明。
直接运行安装程序mongodb-windows-x86_64-6.0.6-signed.msi,最开始界面如下:
在这里插入图片描述
4.0之后,可以再MongoDB安装期间将MongoDB配置为服务。把MongoDB配置为Windows服务。勾选Install MongoD as a Service(默认勾选),如果不勾选就只安装二进制文件,不作为服务。 然后选择 Run Service as Network Service user(以网络服务用户的身份运行)(默认)

在这里插入图片描述
点击next后把 Install MongoDB Compass勾选给去掉。一般建议单独下载安装。最后安装完成如下:
在这里插入图片描述
按 Ctrl + Shfit + Esc,打开任务管理器,切换到服务选项卡,下拉找到 MongoDB 服务。在这里可以观察到 MongoDB 的状态,默认是自动启动,即开机自启。
在这里插入图片描述

或者打开浏览器访问 :

http://localhost:27017

在这里插入图片描述
显示如上信息,说明MongoDB服务启动成功。

# 开始MongoDB服务net start mongodb# 关闭MongoDB服务net stop mongodb

您可以配置mongod和mongos实例位于 使用配置文件启动。配置文件包含 等效于mongod和mongos命令行选项。

mongod --config <configuration file>mongod --config /etc/mongod.confmongos --config /etc/mongos.confmongod -f /etc/mongod.confmongos -f /etc/mongos.conf

以下是一个示例配置文件:

systemLog:   destination: file   path: "/var/log/mongodb/mongod.log"   logAppend: truestorage:   journal:      enabled: trueprocessManagement:   fork: truenet:   bindIp: 127.0.0.1   port: 27017setParameter:   enableLocalhostAuthBypass: false...

YAML 不支持缩进制表符:请改用空格。

2.3 MongoDB Shell

打开MongoDB 的安装目录,默认是 C:/Program Files/MongoDB/Server/6.0
MongoDB 目录如下:
在这里插入图片描述
其中,bin 是 MongoDB 提供的可执行程序的目录,data 是数据存储的目录,log 是日志存储的目录。后两者在过去都需要开发者手动创建。现在安装程序会自动创建。

现在查看bin 目录:
在这里插入图片描述
其中,mongod.exe 用来启动 MongoDB 服务,mongos.exe 用来管理分片集群。

在 MongDB 6 以前,这个目录下会有很多可执行程序,比如最常用的 mongo.exe,它用来连接到 MongoDB 服务,是一个 shell 环境的客户端工具。但是现在需要单独进行安装。

MongoDB Shell是连接(和使用)MongoDB的最快方式。使用这个可扩展的现代命令行界面轻松查询数据、配置设置和执行其他操作 - 充满了语法突出显示、智能自动完成、上下文帮助和错误消息。

注意:MongoDB Shell是一个开源(Apache 2.0),独立于MongoDB服务器开发的独立产品。

https://www.mongodb.com/try/download/shell

在这里插入图片描述

mongosh-1.10.1-win32-x64.zip

解压之后,打开bin文件夹如下:
在这里插入图片描述
将上面两个文件复制到MongoDB 服务器安装文件夹的bin里面:
在这里插入图片描述
如果使用 Shell 命令的形式打开 MongoDB,最好先配置环境变量。
将上面的MongoDB服务器的bin文件夹路径添加到 Path 变量里面。
在这里插入图片描述

在这里插入图片描述

之后就可以在任意路径下使用 mongosh、mongod 等命令了。

连接mongodb服务器
打开命令行工具,执行 mongosh.exe ,默认会连接 mongodb://localhost:27017 的 MongoDB 服务:
mongosh# ormongosh --port 27017

在这里插入图片描述

查看mongodb所有的数据库:
show databases# orshow dbs

在这里插入图片描述

2.4 MongoDB Compass

使用Compass(MongoDB的GUI)轻松探索和操作数据库。Compass 直观而灵活,提供详细的模式可视化、实时性能指标、复杂的查询功能等等。

请注意,MongoDB Compass有三个版本:具有所有功能的完整版本,没有写入或删除功能的只读版本,以及唯一网络连接与MongoDB实例的隔离版本。

https://www.mongodb.com/try/download/compass

在这里插入图片描述

2.5 pymongo库

python -m pip install pymongo# orpython -m pip install pymongo==3.11# orpython -m pip install --upgrade pymongo

3、概念

Mongo中的一些概念:

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

3.1 数据库

一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

命令:show dbs
命令可以显示所有数据的列表。
在这里插入图片描述命令:db
命令可以显示当前数据库对象或集合。
在这里插入图片描述命令:use
可以连接到一个指定的数据库。如果数据库不存在,则创建数据库,否则切换到指定数据库。
在这里插入图片描述

数据库名可以是满足以下条件的任意UTF-8字符串:

不能是空字符串("")。不得含有' '(空格)、.、$、/、\和\0 (空字符)。应全部小写。最多64字节。

特殊作用的数据库:

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
添加用户名和密码
设置超级管理员账号和密码:
use admindb.createUser({  user: 'admin',    // 用户名(自定义)  pwd: '123456',  // 密码(自定义)  roles:[{    role: 'root',   // 使用超级用户角色    db: 'admin'     // 指定数据库  }]})

在这里插入图片描述
找到MongoDB安装目录下的bin目录中的mongod.cfg文件,开启权限验证功能:

security:  authorization: enabled

重启MongoDB服务。连接数据库,并登录超级管理员账号。
除了设置超级管理员账号以外,还可以为每个数据库单独设置账号:

# 为自定义的数据库myMongoDB创建了一个用户hello,它具有对这个数据库的读写权限。use myMongoDB  // 跳转到需要添加用户的数据库db.createUser({  user: 'hello',          // 用户名  pwd: '123456',      // 密码  roles:[{    role: 'readWrite',  // 读写权限角色    db: 'myMongoDB'     // 数据库名  }]})
角色描述角色标识
数据库用户角色read、readWrite
数据库管理角色dbAdmin、dbOwner、userAdmin
集群管理角色clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色backup、restore
所有数据库角色readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
超级用户角色root
命令:db.help()
Display help for database methods.
db.help()

在这里插入图片描述

命令:db.collection.help()
Display help on collection methods. The can be the name of an existing collection or a non-existing collection.
在这里插入图片描述

命令:help
Display help.
在这里插入图片描述

命令:show collections
Display a list of all collections for current database.
在这里插入图片描述

命令:show dbs
Display a list of all databases on the server.
在这里插入图片描述

命令:show tables
Display a list of collections in the current database. See show collections.

命令:show users
Display a list of users for current database.
在这里插入图片描述

3.2 文档(Document)

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:

在这里插入图片描述
MongoDB中的记录是一个文档,它是一个数据结构组成 字段和值对。MongoDB文档类似于JSON。 对象。字段的值可能包括其他文档、数组、 和文档数组。

RDBMSMongoDB
数据库数据库
表格集合
文档
字段
表联合嵌入文档
主键主键 (MongoDB 提供了 key 为 _id )
创建一个新数据库和集合
use myNewDatabasedb.myCollection.insertOne( { x: 1 } );

在这里插入图片描述

添加一个Document

db.collection.insertOne()

use sample_mflixdb.movies.insertOne(  {    title: "The Favourite",    genres: [ "Drama", "History" ],    runtime: 121,    rated: "R",    year: 2018,    directors: [ "Yorgos Lanthimos" ],    cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ],    type: "movie"  })
#插入一条数据:db.stu.insert({name:'zhangsan','age':20});#插入一条数据,指定主键:db.stu.insert({_id:3,'name':'lisi','age':28});#增加多条数据:db.stu.insert([{name:'wangyi','age':18},{'name':'sunwu','age':25}])
添加多个Documents

db.collection.insertMany()

use sample_mflixdb.movies.insertMany([   {      title: "Jurassic World: Fallen Kingdom",      genres: [ "Action", "Sci-Fi" ],      runtime: 130,      rated: "PG-13",      year: 2018,      directors: [ "J. A. Bayona" ],      cast: [ "Chris Pratt", "Bryce Dallas Howard", "Rafe Spall" ],      type: "movie"    },    {      title: "Tag",      genres: [ "Comedy", "Action" ],      runtime: 105,      rated: "R",      year: 2018,      directors: [ "Jeff Tomsic" ],      cast: [ "Annabelle Wallis", "Jeremy Renner", "Jon Hamm" ],      type: "movie"    }])
读取一个Collection所有的Documents

db.collection.find()

use sample_mflixdb.movies.find()
指定相等条件读取Documents
use sample_mflixdb.movies.find( { "title": "Titanic" } )
指定操作符条件读取Documents
use sample_mflixdb.movies.find( { rated: { $in: [ "PG", "PG-13" ] } } )
指定与或逻辑条件读取Documents
use sample_mflixdb.movies.find( { countries: "Mexico", "imdb.rating": { $gte: 7 } } )
更新Documents

db.collection.updateOne().
db.collection.updateMany().
db.collection.replaceOne().

use sample_mflixdb.movies.updateOne( { title: "Twilight" },{  $set: {    plot: "A teenage girl risks everything–including her life–when she falls in love with a vampire."  },  $currentDate: { lastUpdated: true }})
删除Documents

db.collection.deleteMany()
db.collection.deleteOne()

use sample_mflixdb.movies.deleteMany({})db.movies.deleteMany( { title: "Titanic" } )db.movies.deleteOne( { cast: "Brad Pitt" } )

3.3 集合(Collection)

集合就是 MongoDB 文档组,类似于 RDBMS 中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

当第一个文档插入时,集合就会被创建。

MongoDB将文档存储在集合。集合类似于关系数据库中的表。

3.4 元数据

数据库的信息是存储在集合中。它们使用了系统的命名空间:

dbname.system.*

在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection)。

3.5 数据类型

下表为MongoDB中常用的几种数据类型。

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

4、Python代码测试

4.1 连接数据库

mongodb://localhost
mongodb://localhost:port
mongodb://sysop:moon@localhost

import pymongo# myclient = pymongo.MongoClient()# myclient = pymongo.MongoClient("mongodb://localhost:27017")# myclient = pymongo.MongoClient('mongodb://admin:123456@localhost:27017/?authSource=admin')myclient = pymongo.MongoClient('localhost',27017)print(myclient.list_database_names())
import pymongomyclient = pymongo.MongoClient('localhost', 27017)db = mongo_client.admindb.authenticate('用户名', '密码')

4.2 指定数据库和集合

#获取数据库db = client.test_database# ordb = client["test-database"]#指定集合collection = db.test_collection# orcollection = db["test-collection"]

4.3 插入数据

#增加一条stu1={'id':'001','name':'zhangsan','age':10}result = collection.insert_one(stu1)#增加多条stu2={'id':'002','name':'lisi','age':15}stu3={'id':'003','name':'wangwu','age':20}result = collection.insert_many([stu2,stu3])import datetimepost = {    "author": "Mike",    "text": "My first blog post!",    "tags": ["mongodb", "python", "pymongo"],    "date": datetime.datetime.now(tz=datetime.timezone.utc),}posts = db.postspost_id = posts.insert_one(post).inserted_iddb.list_collection_names()import pprintpprint.pprint(posts.find_one())pprint.pprint(posts.find_one({"author": "Mike"}))pprint.pprint(posts.find_one({"author": "Eliot"}))pprint.pprint(posts.find_one({"_id": post_id}))

在这里插入图片描述

# Bulk Insertsnew_posts = [    {        "author": "Mike",        "text": "Another post!",        "tags": ["bulk", "insert"],        "date": datetime.datetime(2009, 11, 12, 11, 14),    },    {        "author": "Eliot",        "title": "MongoDB is fun",        "text": "and pretty easy too!",        "date": datetime.datetime(2009, 11, 10, 10, 45),    },]result = posts.insert_many(new_posts)result.inserted_ids# Querying for More Than One Documentfor post in posts.find():    pprint.pprint(post)# Countingposts.count_documents({})posts.count_documents({"author": "Mike"})# Range Queriesd = datetime.datetime(2009, 11, 12, 12)for post in posts.find({"date": {"$lt": d}}).sort("author"):    pprint.pprint(post)
from pymongo import MongoClient# Replace the uri string with your MongoDB deployment's connection string.uri = "mongodb://localhost:27017"client = MongoClient(uri)# database and collection code goes heredb = client.sample_guidescoll = db.cometscoll.drop()# insert code goes heredocs = [{"name": "Halley's Comet", "officialName": "1P/Halley", "orbitalPeriod": 75, "radius": 3.4175, "mass": 2.2e14},{"name": "Wild2", "officialName": "81P/Wild", "orbitalPeriod": 6.41, "radius": 1.5534, "mass": 2.3e13},{"name": "Comet Hyakutake", "officialName": "C/1996 B2", "orbitalPeriod": 17000, "radius": 0.77671, "mass": 8.8e12},    ]result = coll.insert_many(docs)# display the results of your operationprint(result.inserted_ids)# Close the connection to MongoDB when you're done.client.close()

4.4 删除数据

#可以直接使用remove方法删除指定的数据result = collection.remove({'name': 'zhangsan'})#使用delete_one()删除一条数据result = collection.delete_one({"name":"zhangsan"})#delete_many()删除多条数据result = collection.delete_many({"age":{'$lt':20}})
from pymongo import MongoClient# Replace the uri string with your MongoDB deployment's connection string.uri = "mongodb://localhost:27017"client = MongoClient(uri)# database and collection code goes heredb = client.sample_guidescoll = db.comets# delete code goes heredoc = {    "orbitalPeriod": {        "$gt": 5,        "$lt": 85    }}result = coll.delete_many(doc)# amount deleted code goes hereprint("Number of documents deleted: ", result.deleted_count)# Close the connection to MongoDB when you're done.client.close()

4.5 修改数据

#update_one,第 2 个参数需要使用$类型操作符作为字典的键名#姓名为zhangsan的记录,age修改为22condition = {'name': 'zhangsan'}res = collection.find_one(condition)res['age'] = 22result = collection.update_one(condition, {'$set': res})print(result) #返回结果是UpdateResult类型print(result.matched_count,result.modified_count) #获得匹配的数据条数1、影响的数据条数1#update_many,所有年龄为15的name修改为xixicondition = {'age': 15}res = collection.find_one(condition)res['age'] = 30result = collection.update_many(condition, {'$set':{'name':'xixi'}})print(result) #返回结果是UpdateResult类型print(result.matched_count,result.modified_count) #获得匹配的数据条数3、影响的数据条数3
from pymongo import MongoClient# Replace the uri string with your MongoDB deployment's connection string.uri = "mongodb://localhost:27017"client = MongoClient(uri)# database and collection code goes heredb = client.sample_guidescoll = db.comets# update code goes heredoc = {"$mul": {"radius": 1.60934}}result = coll.update_many({}, doc)# display the results of your operationprint("Number of documents updated: ", result.modified_count)# Close the connection to MongoDB when you're done.client.close()

4.6 查询数据

rets = collection.find({"age":20}),for ret in rets:    print(ret) # 查询结果有多少条数据 count = collection.find().count() # 查询结果按年龄升序排序results = collection.find().sort('age', pymongo.ASCENDING)print([result['age'] for result in results])ret =collection.find_one({'name': 'zhangsan'})
from pymongo import MongoClient# Replace the uri string with your MongoDB deployment's connection string.uri = "mongodb://localhost:27017"client = MongoClient(uri)# database and collection code goes heredb = client.sample_guidescoll = db.planets# find code goes herecursor = coll.find({"hasRings": True})# iterate code goes herefor doc in cursor:    print(doc)# find code goes herecursor = coll.find({"surfaceTemperatureC.mean": {"$lt": 15}})for doc in cursor:    print(doc)# Close the connection to MongoDB when you're done.client.close()

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!


点击全文阅读


本文链接:http://zhangshiyu.com/post/67985.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1