docker安装mongoDB及使用

这篇具有很好参考价值的文章主要介绍了docker安装mongoDB及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.mongodb是什么?

MongoDB是一个NoSQL的非关系型数据库 ,支持海量数据存储,高性能的读写

1.mongo的体系结构

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

2. mongoDB的特点(或使用场景)

  1. 支持存储海量数据;(例如:直播中的打赏数据);

  2. 支持频繁的数据读写;(例如:游戏道具);

  3. 数据安全性不高,存在数据误差(丢失数据);

  4. mongoDB不支持多表操作,不支持事务;

  5. mongoDB使用Bson存储格式,支持动态字段管理;

3. mongoDB与mysql、redis对比

与redis对比

1. redis纯内存数据库,内存不足时触发淘汰策略,mongoDB使用内存加磁盘的存储策略具有高扩展性;
2. mongoDB使用Bson存储格式,支持动态字段管理方便扩展

与mysql对比

1. mongoDB不支持多表操作,不支持事务;
2. mongoDB使用Bson存储格式,支持动态字段管理;

查询效率对比

Redis > MongoDB > MySQL

4. mongoDB存储原理

docker mongodb,python基础,数据库,mongodb,nosql,docker,容器

  1. mongoDb采用内存加磁盘的方式存储数据

  2. mongoDb支持数据分片,当单一的服务器中磁盘不够用的时候,还可以串联其他服务器;

  3. 客户端的请求到达内存时,先在日志中记录下操作记录,然后再去操作内存;

  4. 内存中的日志每10ms向磁盘中的日志进行同步一次,数据则每分钟同步一次;

  5. 客户端先去内存中查询数据,内存中没有再去查询磁盘;

  6. 当客户端写入的时候,会先写入到内存中,内存中写入后请求直接返回,内存中的数据会根据同步策略同步到磁盘;

  7. 如果机器宕机,在重启服务的时候会解析磁盘中的日志和磁盘中的数据进行对比,将未入到磁盘中的数据写入磁盘,但可能会丢失10ms的数据;

二. 使用docker安装mongo

1.安装

1.拉取mongo镜像

 docker pull mongo:4.4

2. 创建mongo数据持久化目录

mkdir -p /docker_volume/mongodb/data

3. 运行容器

docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth
  1. -v: 将宿主机的/docker_volume/mongodb/data映射到容器的/data/db目录,将数据持久化到宿主机,以防止删除容器后,容器内的数据丢失

  2. –auth:需要密码才能访问容器服务

2.创建用户

1. 登录mongo容器,并进入到【admin】数据库

 docker exec -it mongo mongo admin

2. 创建一个用户,mongo 默认没有用户

db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});

【user:‘root’ 】:设置用户名为root 【pwd:‘123456’】:设置密码为123456 【role:‘userAdminAnyDatabase’】:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 【db: ‘admin’】:可操作的数据库 【‘readWriteAnyDatabase’】:赋予用户读写权限

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

3. 连接、测试

1. 连接mongo数据库

db.auth('root', '123456')

2. 测试数据库,插入一条语句

 db.user.insert({"name":"zhangsan","age":18})

3. 测试数据库,查询刚才插入的语句

 db.user.find()

4.navicat连接测试

docker mongodb,python基础,数据库,mongodb,nosql,docker,容器

三. 项目使用mongodb

1. 常用命令

#查看已经存在的数据库
show dbs;
#创建数据库
use 数据库名
#删除数据库
db.dropDatabase()
#查看集合
show collections;
#创建集合
db.createCollection("news")
#删除集合
db.runoob.drop()
#添加数据
db.集合名.insert({'id':1,'title':'12'})
#查询所有
db.集合名.find()
#删除数据
db.集合名.remove({"id":1})
#条件查询
db.集合名.find({"id":1})

2. pymongo使用

1. 安装

pip install pymongo

2. pymysql连接

import pymongo
from urllib import parse
username = parse.quote_plus('mofang')   # 对用户名进行编码
password = parse.quote_plus('123456')  # 对密码进行编码
database = "mofang" # 数据库名称
host     = "127.0.0.1"
port     = "27017"
mongo = pymongo.MongoClient('mongodb://%s:%s@%s:%s/%s' % ( username, password, host, port, database))

3. 数据库操作

import pymongo

# 数据库连接
mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")

# 创建数据库
my_db  = mongo["my_db"] # 没有往集合里面保存文档之前,mongdb不会真正创建集合!

# 查看数据库列表
print(mongo.list_database_names()) # 上面的 my_db 因为没有内容,所以没有被创建的。

4. 集合操作

import pymongo

mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
my_db = mongo["my_db"]

my_collection = my_db["my_collection"] # 没有往集合里面保存文档之前,mongdb不会真正创建集合!

# 查看集合列表
print(my_db.list_collection_names())

# 删除集合
my_collection.drop() # 删除成功返回true,如果集合不存在,返回false

5. 添加

import pymongo
mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
my_db = mongo["my_db"]
my_collection = my_db["my_collection"]

# 添加一个文档
document = { "name": "xiaoming", "mobile": "13012345678","age":16}
ret = my_collection.insert_one(document)
print(ret.inserted_id) # 返回InsertOneResult对象
# 插入文档时,如果没有指定_id,将自动分配一个唯一的id。

# 添加多个文档
document_list = [
  { "name": "xiaoming", "mobile": "13033345678","age":17},
  { "name": "xiaohong", "mobile": "13044345678","age":18},
  { "name": "xiaohei",  "mobile": "13612345678","age":18},
]
ret = my_collection.insert_many(document_list)

# 打印文档_id值列表:
print(ret.inserted_ids)

6. 删除

import pymongo

mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
my_db = mongo["my_db"]
my_collection = my_db["my_collection"]

# 删除一个文档
query = {"name":"xiaoming"}
my_collection.delete_one(query)

# 删除多个文档
query = { "mobile": {"$regex": "^130"} }
ret = my_collection.delete_many(query)
print("删除了%d个文档" % ret.deleted_count)

import pymongo
from urllib.parse import quote_plus

from bson import ObjectId

if __name__ == "__main__":
    username = quote_plus("mofang")
    password = quote_plus("123456")
    # 获取数据库连接对象
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/mofang")
    mofang = mongo["mofang"]
    user_list = mofang["user_list"]

    """删除文档"""
    query = {"_id": ObjectId("60d925e127bd4b7769251002")}
    ret = user_list.delete_one(query)
    print(ret)
    print(ret.deleted_count)
    """删除多个文档"""
    query = {"name": "xiaolan"}
    ret = user_list.delete_many(query)
    print(ret.deleted_count)

7. 更新

import pymongo

mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
my_db = mongo["my_db"]
my_collection = my_db["my_collection"]

# 更新一个文档
query = { "name": "xiaoming" }
data = { "$set": { "age": 18 } }
my_collection.update_one(query, data)

# 更新所有文档
query = { "mobile": {"$regex": "^130"} }
data = { "$set": { "age": 18 } }
my_collection.update_many(query, data)

8. 查询

import pymongo

mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
my_db = mongo["my_db"]
my_collection = my_db["my_collection"]

# 查看一个文档
ret = my_collection.find_one()
print(ret)

# 查看所有文档
for document in my_collection.find():
    print(document)

# 查看文档部分字段,find和find_one的第二个参数表示控制字段的显示隐藏,1为显示,0为隐藏
for document in my_collection.find({},{ "_id": 0, "name": 1, "mobile": 1 }):
    print(document)

# 条件查询
query = { "age": 18 }
document_list = my_collection.find(query)
for document in document_list:
    print(document)

# 比较运算符
query = { "age": {"$gt":17} }
document_list = my_collection.find(query)
for document in document_list:
    print(document)

# 排序显示
# 单个字段排序:
#         sort("键", 1) 升序
#         sort("键",-1) 降序

# 多个字段排序:
#       sort([("键1",1),("键2",-1)])
document_list = my_collection.find().sort("age")
for document in document_list:
    print(document)
    
# 限制查询结果数量
document_list = my_collection.find().limit(3)
print(document_list)

# 偏移、跳过
#    skip(int)
document_list = my_collection.find().limit(3).skip(3) # 从第3篇文档开始获取3篇文档
print(document_list)

# 自定义条件函数
document_list = my_collection.find({"$where":"this.age==18"})
print(document_list)
select o.create_time,o.status,o.account,od.name,od.count,od.price from orders as o inner join detail as od on o.number=od.order_id where userid=o.userid order by o.create_time desc

评价文章来源地址https://www.toymoban.com/news/detail-783192.html

到了这里,关于docker安装mongoDB及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    MongoDB是一个文档数据库,旨在简化应用程序 开发和扩展。 官网地址: https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关

    2024年02月03日
    浏览(46)
  • Docker一键安装个人基础开发环境-MySQL、Redis、MongoDB

    Docker Compose 在个人开发环境中,使用 Docker Compose 可以极大地简化和优化应用程序的部署和管理过程。 Docker Compose 的配置文件通常采用 YAML 格式,使其易于阅读和编写。我们可以在配置文件中指定所需的容器镜像、端口映射、环境变量、数据卷挂载等配置选项,以及容器之间

    2024年02月11日
    浏览(38)
  • docker安装mongoDB及使用

    1.mongo的体系结构 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins 表连接,MongoDB不支持 primary key primary key 主键,MongoDB自动将_id字段设置为主键 2. mongoDB的特点(或使

    2024年02月02日
    浏览(46)
  • NoSql数据库及使用Python连接MongoDB

    NoSQL 数据库是非关系数据库,不使用结构化查询语言 (SQL) 进行数据操作。相反,他们使用其他数据模型进行访问和数据存储。SQL 数据库通常用于处理结构化数据,但它们可能不是处理非结构化或半结构化数据的最佳选择。 NoSQL 数据库提供了快速高效地存储和检索大量数据的

    2024年02月09日
    浏览(110)
  • 如何使用Docker部署MongoDB并结合内网穿透实现远程访问本地数据库

    正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能 学习网站, 通俗易懂,风趣幽默 ,忍不住分享一下给大家。 点击跳转到网站。 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署MongoDB,并结合cpolar内网穿透工具实现公网远程访问本地数据库。 MongoDB服务

    2024年02月22日
    浏览(93)
  • Docker 部署 MongoDB 数据库

    https://www.mongodb.com/zh-cn 缩主机上创建 mongo/configdb/mongod.conf https://hub.docker.com/_/mongo 指定服务执行器与缓存大小 https://hub.docker.com/_/mongo-express 查看默认登录账号密码 注意: 默认登录账号密码是 admin/pass ,docker配置中已经将登录账号密码设置为 admin/123456 http://localhost:8081/ http:/

    2024年04月27日
    浏览(36)
  • docker+mongodb设置数据库的账号和密码

    1、在docker宿主机构建mongodb数据持久化目录 2、拉取镜像 , 选择官方版本(亲测16.x版本的mongodb不可用,可安装指定版本) 3、基于镜像创建容器并设置数据持久化 参数介绍 1、取容器名 --name image_name 2、端口映射(宿主机端口:容器端口) -p host_port:container_port 或 host_ip:host_p

    2024年02月16日
    浏览(43)
  • docker 安装mongodb 虚拟机安装mongodb

    生产环境直接安装比较好,以及使用集群环境,本文仅测试交流使用,我用来写分布式im测试使用: nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务) lsb (负载均衡)store(存储) 1.  mongodb特点 : 支持存储海量数据;(例如:直播中的打赏

    2024年02月13日
    浏览(32)
  • node基础之七:Mongodb 数据库

    下载地址:https://www.mongodb.com/try/download/community v:5.0.20 platform:window package:zip 复制到 c 盘/Programs Files c 盘创建 data/db 文件夹 默认存放数据地址 在 bin 目录下启动数据库 mongod, 客户端连接数据库 mongo 下一章:node基础之八:mongoose 操作数据库

    2024年02月09日
    浏览(52)
  • MongoDB数据库安装

    MongoDB数据的特点: 面相文档存储的分布式数据库 具有很强的扩展性 支持丰富的查询表达式,很接近于关系性数据库 使用类似于json的结构保存数据,可以轻易的查询到文档中内嵌的对象及数组 首先去官网下载安装包 Download MongoDB Community Server | MongoDB 启动MongoDB数据的服务 可

    2024年02月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包