mongodb使用简单文档

news2024/12/26 23:21:26

1、mongodb安装与卸载

1.1、安装

python -m pip install pymongo
或
pip install pymongo

如果要安装指定版本:

python -m pip install pymongo==3.5.1

对已有的版本进行升级:

python -m pip install --upgrade pymongo

1.2、卸载

pip uninstall pymongo

或者

sudo systemctl stop mongodb
sudo apt purge mongodb
sudo apt autoremove

1.3、查看当前版本

pip show pymongo

或者在终端输入:

python
import pymongo
print(pymongo.version)

1.4、查看当前mongodb数据库状态

sudo systemctl status mongodb

1.5、关闭数据库

sudo systemctl stop mongodb

1.6、打开数据库

sudo systemctl start mongodb

1.7、重启数据库

sudo systemctl restart mongodb

1.8、设置数据库开机时是否自动启用(默认启用)

sudo systemctl disable mongodb
sudo systemctl enable mongodb

1.9、故障排查

运行mongo,应显示如下:
在这里插入图片描述
如果报错如下:

Failed to connect to 17.0.0.1:27017

可以运行以下指令安装mongo client与server:

sudo apt-get install mongo-client
sudo apt-get install mongo-server

或者
运行sudo systemctl start mongodb时报错:

unit mongodb.service not found

可以安装:

sudo apt-get install mongo-server

2、数据库可视化工具安装及使用

暂时推荐安装的是Navicat

2.1、安装

下载网址:

https://navicat.com.cn/products

进入网址后,点击最上面的“工具”选项,会出现如下界面:
在这里插入图片描述选择Navicat Premium 16 免费试用:
在这里插入图片描述然后选择下面的位置1,点击下载。

下载后的文件默认放在download文件夹下,如果没有可以在浏览器的下载管理里找到下载的内容点击打开文件夹,然后在该文件夹下打开终端,输入:

chmod +x navicat16-premium-cs.AppImage
./navicat16-premium-cs.AppImage

完成安装。

2.2、Navicat工具的使用

安装完成后,在软件管理里面找到该软件并打开,选择试用,进入软件界面:
在这里插入图片描述
点击左上角的“连接”,选择MongoDB进行新建连接:
在这里插入图片描述连接名可以随便取,点击确定连上数据库。然后就可以对数据库的内容进行查看并操作了。

2.3、Navicat工具刷新试用期

Navicat的试用版只有14天,超过14天后无法打开Navicat,可以使用下列指令刷新试用期时间:

rm -rf ~/.config/navicat
rm -rf ~/.config/dconf/user

3、python下数据库操作常用指令

3.1、数据插入指令

3.1.1、单条数据插入指令:insert_one

insert_one会向数据库表中单独插入一条数据。

from pymongo import MongoClient
myclient = MongoClient("mongodb://localhost:27017")  # Host以及port
db = myclient["myDatabase"]  ##指定要操作的数据库
#mycol = db["collection1"]     ##指定要操作的数据库表,不同的写法
mycol = db.collection1   # 指定要操作的数据库表,没有则自动创建
result = mycol.insert_one({"name":"lisi","age":22,'gender':'female'})   # 插入一条数据,如果没出错那么说明连接成功
print(result)

运行后终端显示:

<pymongo.results.InsertOneResult object at 0x7fb9a3301760>
3.1.2、多条数据插入指令:insert_many

insert_many可以同时插入多条数据,即使它们的参数不完全一致。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017")  # Host以及port
db = myclient["myDatabase"]  ##指定要操作的数据库
coll = db["collection1"]     ##指定要操作的数据库表
mylist = [
  { 'name': 'hanmei', 'age': 19 },
  { 'name': 'wanghua', 'gender': 'male' },
  { 'name': 'lihong', 'gender': 'female' }
]
y = coll.insert_many(mylist)
print(y)

3.2、数据删除指令

3.2.1、单条数据删除指令:delete_one

delete_one指令会搜索并删除第一条满足条件的数据

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.delete_one({'name':'hanmei'})
print(result)

上述示例中虽然给的检索关键词是“name"=“hanmei”,但是其只会删除表中第一条“name"="hanmei"的数据而不会对后续的数据进行操作。

3.2.2、单数据查找并删除指令:find_one_and_delete

该指令与前一条指令类似,但是区别在于该指令可以通过返回值区分删除是否成功:

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one_and_delete({'name':'lihong'})
print(result)

这里相当于删除了一条name为lihong的数据,如果找到并删除了会返回被修改的数据:

{'_id': ObjectId('64f7f81835699cd683b594b2'), 'name': 'lihong', 'gender': 'female'}

如果没有找到会返回None。

3.2.3、多条数据删除指令:delete_many

delete_many会同时删除数据库中所有满足条件的数据

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result= coll.delete_many({
    'gender':'male'
})
print(result.raw_result)  #查看返回的结果

上述指令执行时搜索数据库表中所有gender=male的数据并进行删除,删除后的数据库表显示如下:

3.3、数据查找指令

3.3.1、数据库表查询指令:find

find函数可以返回被查询的数据库表内的所有数据,属于无条件查找

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find()
for each in result:
    print(each)
3.3.2、条件查询指令:find

可以在find中添加需要查询的关键字,实现带条件的查询,此时会满足所有满足条件的结果:

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find({'name':'lihong'})
#输出的两种方式:
#打印单条
#print(list(result)[0])
#或打印全部
for each in result:
    print(each)
3.3.3、多条件查询指令:find

如果在find中同时添加多个条件,可以实现多条件的数据查询指令:

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find({'name':{'$in':['lisi','lihong']},'gender':'female'})
for each in result:
    print(each)

如上式,查询的条件为name为’lisi’或者’lihong’,同时满足gender为female的数据。

3.3.4、仅返回第一条数据的条件查询指令:find_one

该函数返回第一条满足条件的数据:

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one({'name':'lisi'})
print(result)
3.3.5、字段查询指令:distinct

该指令用于查询某个字段下存在哪些数据类型

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
Scode = coll.distinct( "age")
print (Scode)

上述代码的含义是查询当前age字段下存在哪几种不同的数据

3.4、数据修改指令

3.4.1、单字段修改指令:update_one

查询满足条件的第一条字段并修改其对应参数:

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.update_one({'name':'lisi'},{'$set':{'age':'20'}})
print(result)

注意如果这里查询的条件不满足则不会进行任何操作。

3.4.2、单数据查找并修改指令:find_one_and_update
from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one_and_update({'name':'lihong'},{'$set':{'name':'hansi','age':'6'}})
print(result)

这里相当于找到第一条满足条件name为lihong的数据,修改它的name为hansi,age为6
注意这里是找到并修改,所以对于没有输入的字段是不会修改的,还是会保留原来的值。同时执行该指令后终端会显示被修改的单条数据的具体信息:

{'_id': ObjectId('64f7f78e687db263aba6bd15'), 'name': 'lihong', 'gender': 'female'}

此外,如果查找给的条件没有找到满足的数据时,result的返回值会变成None,这是find_one_and_update与update_one之间的区别。

3.4.3、单数据查找并替换指令:find_one_and_replace

前面find_one_and_update指令查找一条数据并进行修改时只会修改传入的一部分参数,对于其他参数不进行修改。如果需要将整个参数都替换掉的话可以直接使用find_one_and_replace指令:

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one_and_replace({'name':'hanmei'},{'name':'jeson','weight':56})
print(result)

上述指令执行时会查找第一条满足name = hanmei的数据并使用后面的数据进行替换。该指令与update最大的区别在于update会保留那些传入参数中没有附带的字段,但是replace则会清空这些字段。

3.4.4、多数据查找并替换指令:update_many

该指令会批量修改满足查找要求的数据,将对应的字段全部修改为一致。

from pymongo import MongoClient
host = 'localhost'   # 你的ip地址
client = MongoClient(host, 27017)  # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.update_many({'name':'lisssi'},{'$set':{'weight':'48','age':16}})
print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB】史上最全的5种数据插值算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有5种数据插值算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一算法的代码&#xff08…

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…

kubernetes|云原生| 如何优雅的重启和更新pod---pod生命周期管理实务

前言&#xff1a; kubernetes的管理维护的复杂性体现在了方方面面&#xff0c;例如&#xff0c;&#xff50;&#xff4f;&#xff44;的管理&#xff0c;服务的管理&#xff0c;用户的管理&#xff08;&#xff32;&#xff22;&#xff21;&#xff23;&#xff09;&#xf…

RT-DETR算法优化改进:SCConv,空间和通道重建卷积 | CVPR2023 | 卷积变体大作战

💡💡💡本文改进:SCConv(空间和通道重建卷积),一个即插即用的架构单元,可以直接用来替代各种卷积神经网络中的标准卷积。 1)放入Neck RepC3后面; RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.html ✨✨✨魔改创新RT-DETR �…

98.qt qml-使用曲线图综合示例、支持多种鼠标交互、支持百万数据显示(已适配黑白风格)

在上章我们只是简单实现了曲线图和折线图的显示: 79.qt qml-如何在QML中使用QCustomPlot之曲线/折线示例(已适配黑白风格)_qml 折线图_诺谦的博客-CSDN博客 所以本章实现综合示例、并添加多种功能如下所示: 详细显示:鼠标任意移动显示具体值内容鼠标右击: 弹出菜单栏,支持…

华夏ERP打包手册

Maven安装及环境配置 1.下载 浏览器搜索maven点击apache Maven 2.选择安装目录&#xff0c;注意不能有中文 3.环境变量配置 点击计算机右键属性>高级系统设置>环境变量 新建系统变量 MAVEN_HOME 变量值是安装目录 进入path点击新建点击编辑&#xff0c;写入% MAVEN_H…

【Unity】单例模式及游戏声音管理类应用

【Unity】单例模式及游戏声音管理类应用 描述 在日常游戏项目开发中&#xff0c;单例模式是一种常用的设计模式&#xff0c;它允许在应用程序的生命周期中只创建一个对象实例&#xff0c;并提供对该实例的全局访问点。通过使用单例模式&#xff0c;可以提高代码的可维护性和可…

人工智能轨道交通行业周刊-第65期(2023.10.30-11.19)

本期关键词&#xff1a;高铁自主创新、智慧城轨、调车司机、大模型垂直应用、大模型幻觉 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道…

PaddlePaddle:开源深度学习平台

深度学习作为人工智能领域的重要分支&#xff0c;正在全球范围内得到广泛应用。而在构建和训练深度学习模型时&#xff0c;选择一个高效、易用且功能强大的开源平台是至关重要的。PaddlePaddle&#xff08;即飞桨&#xff09;作为国内领先的深度学习平台&#xff0c;一直以来都…

【代码随想录】算法训练计划23

1、669. 修剪二叉搜索树 题目&#xff1a; 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&…

在 C# 程序中注入恶意 DLL

为什么 Windbg 附加到 C# 程序后&#xff0c;程序就处于中断状态了&#xff1f;它到底是如何实现的&#xff1f;其实简而言之就是线程的远程注入&#xff0c;这一篇就展开说一下。 实现原理 1. 基本思路 WinDbg 在附加进程的时候&#xff0c;会注入一个线程到 C# 进程 中&…

设计模式-行为型模式-责任链模式

一、什么是责任链模式 责任链模式是一种设计模式。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递&#xff0c;直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求&…

RobotFramework之如何使用数据驱动(十二)

学习目录 引言 数据驱动是什么&#xff1f; 非驱动方式测试案例 通过添加Template模板的方式&#xff0c;实现数据驱动 将参数放在变量文件中&#xff0c;实现数据驱动 引言 大家平时在写接口或者UI自动化用例的时候&#xff0c;是否遇到这种情况&#xff1a; 写了很多条…

手搓哈希表、列表、队列,只为了用C语言快速求解华容道游戏,我不是大佬,只是一个游戏算法爱好者

背景 多年前曾经写过C语言求解华容道&#xff0c;当时没有用到哈希表&#xff0c;导致整个查重搜索数组过大&#xff0c;每次求解都得花上数分钟的时间&#xff0c;如今时过境迁&#xff0c;对数据结构和算法有了更深的理解&#xff0c;所以得把这一块补上了。(其实就是最近想…

UE5制作场景时的小技巧和注意事项

UE5制作场景时的小技巧和注意事项 一、场景相关 1.1灯光 1.1.1构建完光照,发现场景都是黑的 可能是所有灯光是静态灯光,把skylight改为动态,如果改完之后还是黑色的,那就在构建一次,就应该没问题了 1.1.2场景中有多个动态光会造成阴影闪烁 需要将skylight变为固定 1…

CI/CD - jenkins

目录 一、部署 1、简介 2、部署 二、配置 三、实时触发 四、自动化构建docker镜像 五、通过ssh插件交付任务 六、添加jenkins节点 七、RBAC 八、pipeline 九、jenkins结合ansible参数化构建 1、安装ansible 2、新建gitlab项目 3、jenkins新建项目playbook 一、部…

linux进程之进程的优先级➕环境变量

文章目录 1.优先级的认识1.1优先级的介绍1.2初识优先级1.3ps指令1.4查看/修改进程的优先级1.5对优先级的认识1.6对进程的深一步理解 2.环境变量2.0环境变量相关的命令2.1环境变量的概念2.2常见/查看环境变量2.3环境变量的作用2.4修改环境变量1.将zombie可执行程序放到PATH现有的…

IOS object-c大屏图表 PNChart 折线图 曲线图

折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间&#xff08;根据常用比例设置&#xff09;而变化的连续数据&#xff0c;因此非常适用于显示在相等时间间隔下数据的趋势。在折线图中&#xff0c;类别数据沿水平轴均匀分布&#xff0c;所有值数…

​软考-高级-系统架构设计师教程(清华第2版)【第19章 大数据架构设计理论与实践 (P691~716)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第19章 大数据架构设计理论与实践 &#xff08;P691~716&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

AI Navigation导航系统_unity基础开发教程

AI Navigation导航系统 安装插件烘焙导航系统障碍物创建人物的AI导航动态障碍物 在unity编辑器中&#xff0c;有一个灰常好用的插件&#xff1a;Navigation。有了它1&#xff0c;你就可以实现人物自动走到你鼠标点击的位置&#xff0c;而且还会自动避开障碍物&#xff0c;下面就…