MongoDB的常用操作以及python连接MongoDB

一,MongoDB的启动

mongod --dbpath=..\data\db
mongodb

注意同时开两个窗口,不要关!

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

二, MongoDB的简单使用

简单介绍一下mongoDB中一些操作

show dbs: 显示所有数据库
show databases: 显示所有数据库
use xxxx: 使用指定数据库/创建数据库(新库中插入数据才可以显示新库)
db: 当前正在使用的数据库
db.dropDatabase(): 删除数据库 当前的
show collections: 显示当前数据库中所有的集合(表)

三, MongoDB的增删改查

1. mongodb中常见的数据类型:

Object ID: 主键ID【"_id" : ObjectId("655e0fbb6b39977605602770")】
String: 字符串
Boolean: 布尔值  
Integer: 数字
Doube: 小数
Arrays: 数组,[1,2,3]
Null : 空值 
Timestamp: 时间戳
Date: 时间日期

2. mongodb插入数据/文档

#collection_name集合/表不存在则会新建
db.collection_name.insert({字段:值,字段:值})

示例:

db.c1.insert({name:"bobo", age:18, hobby:['eat', 'sleep']})
db.users.insertOne({name: "John", age: 30, email: "john@example.com"})
db.users.insertOne({name: "John", age: 30})

插入多条数据:

#c1是表名/集合名
db.getCollection('c1').insertMany([
        {
            "name":"bobo",
        },
        {
            "address":"河北"
        },
    ]
);

db.c1.insertMany([
  {name: "Alice", age: 25, email: "alice@example.com"},
  {name: "Bob", age: 35, email: "bob@example.com"}
])
  • 注意, 如果集合不存在. 则会自动创建集合

  • 插入数据后可以查询所有数据查看是否插入成功:

db.stu.find()

3. mongodb修改数据

3.1 update更新
#d1是表名
db.d1.update({查询条件}, {待修改内容}, {multi: 是否多条数据修改})
multi:true表示修改满足条件所有的内容,否则只修改满足条件的第一条内容,multi不写默认为false

示例:

db.d1.update({name:"bobo"}, {$set:{title:"alex", hobby:['抽烟', '喝酒', '烫头']}}, {multi:true});
db.c1.update({name:"bobo"}, {$set:{title:"alex", hobby:['抽烟', '喝酒', '烫头']}}, {multi:true});
db.users.updateOne({name: "John"}, {$set: {age: 31}})
db.users.updateMany({age: {$lt: 30}}, {$inc: {age: 1}})

4.mongodb删除数据

4.1 remove()
db.collection_name.remove({条件}, {justOne:true|false})
db.collection_name.remove() 删除所有记录
db.collection_name.drop()  删除collection/表

示例:

db.nor_col.remove({name:"jay"}, {justOne:true})
4.2 deleteOne()
db.collection_name.deleteOne({条件})

示例:

db.nor_col.deleteOne({name:"jay"})
db.users.deleteOne({name: "Alice"})
4.3 deleteMany()
db.collection_name.deleteMany({条件})

示例:

db.nor_col.deleteMany({name:"jay"})
db.users.deleteMany({age: {$gte: 40}})

5. mongodb查询数据

准备数据:

db.stu.insert([
	{name: "朱元璋", age:800, address:'安徽省凤阳', score: 160},
	{name: "朱棣", age:750, address:'江苏省南京市', score: 120},
	{name: "朱高炽", age:700, address:'北京紫禁城', score: 90},
	{name: "李嘉诚", age:38, address:'香港xxx街道', score: 70},
	{name: "麻花藤", age:28, address:'广东省xxx市', score: 80},
	{name: "大老王", age:33, address:'火星第一卫星', score: -60},
	{name: "咩咩", age:33, address:'开普勒225旁边的黑洞', score: -160}
])

5.1 普通查询
db.c1.find() 查询所有
db.c1.find({"字段":"固定值"})  查询满足条件的所有数据
db.c1.findOne({条件})  查询满足条件的第一条数据
db.getCollection('c1').find({"字段1":"固定值1","字段2":"固定值2"})

db.users.find({name: "John"})
db.users.findOne({age: {$gt: 30}})
条件查询:

使用逻辑与(AND)条件:

db.users.find({age: 30, city: "New York"})

使用逻辑或(OR)条件:

   db.users.find({$or: [{age: 25}, {city: "London"}]})

使用比较操作符进行范围查询

db.users.find({age: {$gt: 30, $lt: 40}})
5.2 比较运算
等于: 默认是等于判断, $eq
小于:$lt (less than)
小于等于:$lte (less than equal)
大于:$gt (greater than)
大于等于:$gte
不等于:$ne
db.stu.find({age:28})  查询年龄是28岁的学生信息
db.stu.find({age: {$eq: 28}})  查询年龄是28岁的学生信息
db.stu.find({age: {$gt: 30}})   查询年龄大于30岁的学生
db.stu.find({age: {$lt: 30}})   查询年龄小于30岁的学生
db.stu.find({age: {$gte: 38}})  查询年龄大于等于30岁的学生
db.stu.find({age: {$lte: 38}})  查询年龄小于等于30岁的学生
db.stu.find({age: {$ne: 38}})   查询年龄不等于38的学生
不用加“”
5.3 逻辑运算符

and
$and: [条件1, 条件2, 条件3…]

查询年龄等于33, 并且, 名字是"大老王"的学生信息
db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]})

or
$or: [条件1, 条件2, 条件3]

查询名字叫"李嘉诚"的, 或者, 年龄超过100岁的人
db.stu.find({$or: [{name: '李嘉诚'}, {age: {$gt: 100}}]})

nor

$nor: [条件1, 条件2, 条件3]

查询年龄不小于38岁的人, 名字还不能是朱元璋. 
db.stu.find({$nor: [{age: {$lt: 38}}, {name: "朱元璋"}]})
5.4 范围运算符

​ 使用$in, $nin判断数据是否在某个数组内

db.stu.find({age: {$in:[28, 38]}})   年龄是28或者38的人
5.5 正则表达式

​ 使用$regex进行正则表达式匹配

db.stu.find({address: {$regex:'^北京'}})  查询地址是北京的人的信息
db.stu.find({address: /^北京/})  效果一样
db.users.find({name: /^J/})//类似js语法
5.6 skip和limit
db.stu.find().skip(3).limit(3)	

跳过3个. 提取3个. 类似limit 3, 3 可以用来做分页

5.7 排序

sort({字段:1, 字段:-1})

1表示升序
-1表示降序

对查询结果排序, 先按照age升序排列, 相同项再按照score降序排列
db.stu.find().sort({age:1, score: -1})  
5.8 统计数量

count(条件) 查询数量

db.stu.count({age:33})

四,pymongo的使用

python处理mongodb首选就是pymongo. 首先, 安装一下这个模块

pip install pymongo

建立连接

import pymongo

conn = pymongo.MongoClient(host='localhost', port=27017)
print(conn)
# 切换数据库
py = conn['test']

# 登录该数据库(需要的话)
# #py.authenticate("python_admin", '123456')
# 简单来个查询
# 查询所有数据
result = py["stu"].find()
for r in result:
    print(r)
print(type(result))

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java http

超文本传输协议 超文本/html 工作方式 get / url 请求获取相应报文 http://xxxxxxxxxxxx.com/user?xxx xxx 协议类型 - 服务器地址 -路径 path 请求格式: head / body path路径进行处理资源 等同于报文请求: GET: /users HTTP/1.1 Host:api.github.com 响应报文 请求方式…

配电房智能综合监控系统

配电房智能综合监控系统是一种针对配电房环境和设备进行实时监控和管理的系统。依托电易云-智慧电力物联网,它集成了多种先进技术,如物联网、大数据、AI视频智能分析等,实现对配电房全方位、智能化的监控和管理。 这个系统的主要功能可能包括…

Hadoop -hdfs的读写请求

1、HDFS写数据(宏观): 1、首先,客户端发送一个写数据的请求,通过rpc与NN建立连接,NN会做一些简单的校验,文件是否存在,是否有空间存储数据等。 2、NN就会将校验的结果发送给客户端…

汇编-CALL和RET指令

CALL指令调用一个过程, 使处理器从新的内存位置开始执行。过程使用RET(从过程返回) 指令将处理器转回到该过程被调用的程序点上。 CALL指令的动作: 1.将CALL指令的下一条指令地址压栈(作为子过程返回的地址) 2.将被调过程的地址复制到指令指针寄存器E…

Python---global关键字---设置全局变量

global 英 /ˈɡləʊb(ə)l/ adj. 全球的,全世界的;全面的,整体的;(计算机)全局的;球形的 需求:如果有一个数据,在函数A和函数B中都要使用,该怎么办&…

如何使用 Navicat 连接 GaussDB 主备版

Navicat Premium(16.2.8 Windows版或以上) 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…

④【Set】Redis常用数据类型: Set [使用手册]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Redis Set ④Redis Set 操作命令汇总1. sadd …

千云物流 - 使用k8s负载均衡openelb

openelb的介绍 具体根据官方文档进行安装官方文档,这里作为测试环境的安装使用. OpenELB 是一个开源的云原生负载均衡器实现,可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区…

web需求记录

需求1:根据后端传过来的设备名:DESKTOP-4DQRGQB,以及mac:e0:be:03:74:40:0b;iQOO-8,mac:b0:33:66:38:c3:25,用web option 是动态增加的(也就是那个选择框里面的东西是根据后端传过来的值动态增加的&#xf…

[VS]控制台程序运行后无法聚焦到命令行窗口

0 环境 Windows11 22H2VS 2022 CommunityWindows Terminal 1.18.2822.0 1 问题说明 当使用 VS 写控制台程序时,运行后会弹出 CMD 窗口,并聚焦到该窗口。除了当前程序运行外,最后应该是暂停,等待用户输入任意按键,然…

竞赛 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/pos…

论文笔记:Localizing Cell Towers fromCrowdsourced Measurements

2015 1 Intro 1.1 motivation opensignal.com 、cellmapper.net 和 opencellid.org 都是提供天线(antenna)位置的网站 他们提供的天线位置相当准确,但至少在大多数情况下不完全正确这个目标难以实现的原因是蜂窝网络供应商没有义务提供有…

3-合并区间

1题目描述 2思路 在合并区间之前,需要对所有的区间按照区间第一个元素进行排序,这样可以保证已经合并的各个区间之后不会再包含其他区间,或者被其他区间包含; 首先自己进行一下排序练习,回顾冒泡排序和选择排序&#…

Leetcode——121 买卖股票的最佳时机

(超时。。。。。。&#xff09;除了暴力法我是真的。。。。。。 class Solution {public int maxProfit(int[] prices) {int len prices.length;int max0;for(int i0;i<len-1;i){for(int ji1;j<len;j){int income prices[j] - prices[i];if(income>max){maxincome;…

真实网络中的 bbr

本文包含中心极限定理&#xff0c;大数定律&#xff0c;经济规律等&#xff0c;bbr 倒没多少&#xff0c;不过已经习惯把 bbr 当靶子了。 上周写了 揭秘 bbr 以及 抢带宽的原理&#xff0c;我对自己说&#xff0c;这都是理论上如何&#xff0c;可实际上呢。于是有必要结合更实际…

基于VM虚拟机下Ubuntu18.04系统,Hadoop的安装与详细配置

参考博客&#xff1a; https://blog.csdn.net/duchenlong/article/details/114597944 与上面这个博客几乎差不多&#xff0c;就是java环境配置以及后面的hadoop的hdfs-site.xml文件有一些不同的地方。 准备工作 1.更新 # 更新 sudo apt update sudo apt upgrade2.关闭防火…

数据结构-栈的实现

1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…

git-2

1.分离头指针情况下的注意事项 分离头指针指的是变更没有基于某个branch去做&#xff0c;所以当进行分支切换的时候&#xff0c;在分离头指针上产生的commit&#xff0c;很可能会被git当作垃圾清理掉&#xff0c;如果你认为是重要的内容&#xff0c;切记需要绑定分支 2.进一步…

NFC:应用场景广泛的短距离通信技术

NFC&#xff1a;应用场景广泛的短距离通信技术 一、NFC 技术介绍1.1 NFC 技术应用场景1.2 NFC 技术优点1.3 NFC 工作原理 二、NFC 开发2.1 NFC 应用开发流程2.2 NFC 读取和写入2.3 NFC 读写功能示例 三、总结 一、NFC 技术介绍 NFC &#xff08;Near-field communication&…

hadoop在本地创建文件,然后将文件拷贝/上传到HDFS

1.要$cd {对应目录}进入到对应目录&#xff0c;一般为 cd /usr/local/hadoop/ 2.创建文件&#xff0c;$sudo gedit {文件名}&#xff0c;例 sudo gedit test.txt 然后在弹出的txt文件输入内容&#xff0c;点击右上角的保存之后&#xff0c;关闭即可。 3.拷贝本地文件到HDF…