MongoDB基础

news2024/11/20 7:27:33

目录

  • 简介
  • 安装
  • 基操
  • pymongo

简介

  • MongoDB 是一个非关系型数据库
  • 非常适合超大数据集的存储,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
  • 对比 SQL
    SQLMongodb
    表(Talbe)集合(Collection)
    行(Row)文档(Document)
    列(Col)字段(Field)
    主键(Primary Key)对象ID(ObjectId)

安装

  • 官网下载 MongoDB 的安装包

基操

  • 直接在命令行进入客户端
    mongo
    show dbs; #显示所有数据库
    show databases;	#显示所有数据库
    use xxxx;	#使用指定数据库/创建数据库(新库中插入数据才可以显示新库)
    db;	 #当前正在使用的数据库
    db.dropDatabase();	#删除当前数据库
    show collections; #显示当前数据库中所有的集合(表)
    
  • 常见数据类型,文档用的多一些(字典);文档内各元素无序
    Object ID: 主键ID【"_id" : ObjectId("56063f17ade2f21f36b03133")】
    String: 字符串
    Boolean: 布尔值  
    Integer: 数字
    Doube: 小数
    Arrays: 数组,[1,2,3]
    Object: 文档(关联其他对象)  {sname: 李嘉诚, sage: 18, class:{cccc}}
    Null : 空值 
    Timestamp: 时间戳
    Date: 时间日期
    
  • 插入数据;按照插入顺序排序
    # 如果集合不存在. 则会自动创建集合
    db.c1.insert({name:"bobo", age:18, hobby:['eat', 'sleep']})
    # 插入多条数据
    db.getCollection('c1').insertMany([
            {
                "name":"roy",
            },
            {
                "address":"NX"
            },
        ]
    );
    
    1
  • 更新数据,关键字:$set
    # db.d1.update({查询条件}, {待修改内容}, {multi: 是否多条数据修改})
    # multi:true表示修改满足条件所有的内容,否则只修改满足条件的第一条内容,multi默认为false
    db.d1.update({name:"bobo"}, {$set:{title:"alex", hobby:['抽烟', '喝酒', '烫头']}}, {multi:true});
    
  • 删除数据
    db.collection_name.remove({条件}, {justOne:true|false})
    db.collection_name.remove() #删除所有记录
    db.collection_name.drop()  	#删除collection/表
    # 举例
    db.col.remove({name:"jay"}, {justOne:true})
    # 删除一条数据
    db.collection_name.deleteOne({条件})
    
  • 查询数据
    • 普通查询
      db.c1.find() 	#查询所有
      db.c1.find({"字段":"固定值"})  #查询满足条件的所有数据
      db.c1.findOne({条件})  #查询满足条件的第一条数据
      db.getCollection('c1').find({"字段1":"固定值1","字段2":"固定值2"})
      
    • 比较
      等于: 默认是等于判断, $eq
      小于:$lt (less than)
      小于等于:$lte (less than equal)
      大于:$gt (greater than)
      大于等于:$gte
      不等于:$ne
      
    • 看个例子吧
      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}
      ])
      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的学生
      
    • 逻辑运算
      db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]})
      db.stu.find({$or: [{name: '李嘉诚'}, {age: {$gt: 100}}]})
      # 查询年龄不小于38岁的人, 名字还不能是朱元璋
      db.stu.find({$nor: [{age: {$lt: 38}}, {name: "朱元璋"}]})	
      
    • 存在
      db.stu.find({age: {$in:[28, 38]}})   #年龄是28或者38的人
      
    • 正则表达式
      db.stu.find({address: {$regex:'^北京'}})  #查询地址是北京的人的信息
      db.stu.find({address: /^北京/})  #效果一样
      
    • 分页
      db.stu.find().skip(3).limit(3)	# 跳过3个. 提取3个.
      
    • 排序
      #先按照age升序排列, 相同项再按照score降序排列
      db.stu.find().sort({age:1, score: -1}
      
    • 统计
      # 条件都是以文档类型传入
      db.stu.count({age:33})
      
  • 非关系型数据库,就是这么简单

pymongo

  • 基操
    import pymongo
    
    import pymongo
    from pymongo import MongoClient
    
    #创建返回链接对象
    def get_db(database):
        """
        连接数据库
        :param database: 数据库名
        :return:
        """
        client = MongoClient(host="localhost", port=27017)
        db = client[database]
        return db
    
    def add_one(table, data):
        """
        新增数据
        :param table:
        :param data: 字典格式(文档类型)
        :return:
        """
        db = get_db("python")
        result = db[table].insert_one(data)
        return result
    
    
    def add_many(table, data_list):
        """
        新增多条数据
        :param table:
        :param data_list:数据数组
        :return:
        """
        db = get_db("python")
        result = db[table].insert_many(data_list)
        return result.inserted_ids
    
    
    def upd(table, condition, data):#condition条件
        """
        修改数据
        :param table:
        :param condition: 匹配条件
        :param data:
        :return:
        """
        db = get_db("python")
        result = db[table].update_many(condition, {'$set':data})
        return result
    
    
    def delete(table, condition):
        """
        删除数据
        :param table:
        :param condition:
        :return:
        """
        db = get_db("python")
        result = db[table].delete_many(condition)
        return result
    
    
    if __name__ == '__main__':
        # 所以操作都要指定表名,因为一个库是可以包含多个collection的
        # r = add_one("stu", {"name": "西瓜", "age":18})
        # print(r.inserted_id)
        # r = add_many("stu", [{"name": "嘎嘎"},{"name": "咔咔"}])
        # print(r)
    
        # result = upd("stu", {"name": '西瓜'}, {"age": 100})
        # print(result)
    
        result = delete("stu", {"name": "嘎嘎"})
        print(result)
    

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

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

相关文章

TC275——03开发环境搭建

开发环境与工具链的搭配有很多,这里选择最省事的英飞凌自己推出的一款基于eclipse的IDE,主要是学习,不用于商业用途。 安装ADS开发环境 下载网址: AURIX™ Development Studio - Infineon Technologies 下载这个安装包 双击安装…

Springboot-Vue项目框架每部分的介绍

Springboot-Vue项目框架每部分的介绍 文章目录Springboot-Vue项目框架每部分的介绍前端后端前端 后端 如上图所示,在Springboot项目中,目录结构有代码层结构和资源文件的结构 SpringBoot项目框架对工程结构并没有特殊的限制,只要是良好的工程…

C语言--图书管理项目

C语言图书管理系统项目 第一节 C 语言基础以及基本数据类型 第二节 C 语言运算符 第三节 C 语言控制语句 第四节 C 语言自定义函数 第五节 C 语言修饰变量的关键字 第六节 C 语言构造数据类型–数组 第七节 C 语言字符串 第八节 C 语言指针 第九节 指针与函数、指针函数、函数…

【Linux多线程编程】1. 多线程与单线程

什么是单线程 在描述什么是多线程之前&#xff0c;先讲讲什么是单线程。 int var 100; // 全局变量 var&#xff0c;初始值为 100 void func(){var 100;std::cout << "now var is: " << var << std::endl; // c 语法&#xff0c;意思为输出 va…

【强训】day02

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、 编程1. 排序子序列2. 倒置字符串答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 阅读如下代码。 请问&#xff0c;对语句行 test.hello(). 描述正确的有&#xff08;&#xff09; pa…

网站备案信息查询,网站备案号在哪里查询

网站备案号一般是在工信部官方查询&#xff0c;也可以使用第三方工具查询。 1、使用工信部域名信息备案管理系统网站查询 打开工信部的域名信息备案管理系统网站https://beian.miit.gov.cn/&#xff0c;点击ICP备案信息查询&#xff0c;添加需要查询的域名&#xff08;网站网址…

Drools基础与实现(操作实例)

简介&#xff1a; Drools 是用 Java 语言编写的开放源码规则引擎&#xff0c;使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则&#xff0c;从而便于学习和理解。并且&#xff0c;还可以将 Java 代码直接嵌入到规则…

逻辑漏洞渗透与攻防(一)之身份验证漏洞

目录 逻辑漏洞概要 漏洞的根因&#xff1a; 逻辑漏洞的分类&#xff1a; 身份验证漏洞 暴力破解漏洞 1.1 未限制爆破 1.2 爆破-验证码爆破 1.3 暴力破解漏洞-限制IP爆破 1.4 暴力破解漏洞-限制密码错误次数来爆破 1.5 暴力破解漏洞-多字段爆破 1.6 限制登录频率爆破 …

(小程序)会议OA项目-其它页面

目录 一、tabs组件及会议管理布局 1.自定义tabs组件 2.会议管理 二、投票管理参考图 三、个人中心布局 一、tabs组件及会议管理布局 1.自定义tabs组件 文档参考:自定义组件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framewo…

植物大战僵尸:实现自动收集阳光

植物大战僵尸这款游戏可以说是很多90后的回忆了&#xff0c;基本上只要是90后或多或少的都接触过&#xff0c;而玩游戏与制作辅助是两个概念&#xff0c;今天我将给大家分享一些游戏辅助方面的制作技巧&#xff0c;之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析&#…

Apache Kafka Spring 集成

Apache Kafka Spring 集成 今天来学习Spring如何集成 Apache kafka&#xff0c;在Spring Boot中如何集成kafka客户端 生产、消费消息。首先介绍下各个组件的版本信息&#xff1a; Apache Kafka_2.13-3.3.1Spring Boot 3.0.0Apache-Maven-3.6.0JDK-17.0.5 启动Kafka # 进入k…

ArcGIS基础实验操作100例--实验38删除冗余节点

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验38 删除冗余节点 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

免费分享在线设计工具,比ps还方便的贺卡设计工具!

元旦贺卡在线制作工具&#xff0c;不用自己设计&#xff0c;只需借助在线工具平台的模板就能轻松搞定的贺卡设计方法&#xff01;跟着小编下面的设计步骤&#xff0c;使用在线工具乔拓云轻松设计活动贺卡&#xff0c;设计过程简单且一键生成分享链接&#xff0c;不用自己设计工…

推荐四款常见的电子教室软件,大家觉得哪款好用

现在越来越多的教学教室都在使用多媒体教学软件&#xff0c;不仅包括学校&#xff0c;还有一些培训机构和教堂。 那么&#xff0c;多媒体教学软件有哪些&#xff1f; 哪款多媒体教学软件好用&#xff1f; 在今天的文章中&#xff0c;小编挑选了4款流行的多媒体教学软件推荐给大…

【全网最细PAT题解】【PAT乙】1009 说反话(cin、getline、cin.getline三种输入格式)

题目链接 1009 说反话 题目描述 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词…

【Spring 入门教程2】

&#x1f308;博客主页&#xff1a;屠一乐的博客 &#x1f4c5; 发文时间&#xff1a;2023.1.2 &#x1f388; 一定存在只有你才能做成的事 &#x1f339; 博主水平有限&#xff0c;如有错误&#xff0c;欢迎指正 欢迎各位&#x1f44d;收藏&#x1f48e;评论✉ Spring_day02 S…

C++ - opencv应用实例之矩形框检测

C++ - opencv应用实例之矩形框检测 现阶段下,目标检测在实际应用场景中的表现颇为重要,工业质检、移动机器人视觉伺服、作业、交通监控、安防领域等均需要通过目标检测来实现对目标的定位、测量或者统计、辅助控制等目前目标检测主要分为两个方向的发展,其一是基于传统图像处…

let、const、var关键字

1、let ES6中新增的用于声明变量的关键字。 &#xff08;1&#xff09;let声明的变量只在所处于的块级有效 if (true) { let a 10;} console.log(a) // a is not defined 注意&#xff1a;使用let关键字声明的变量才具有块级作用域&#xff0c;使用var声明的变量不具备块级…

计算机网络(二)Linux网络编程

layout: post title: 计算机网络&#xff08;二&#xff09;Linux网络编程 description: 计算机网络&#xff08;二&#xff09;Linux网络编程 tag: 计算机网络 文章目录POSIX概念POSIX网络相关APIsocket()bind()网络字节序与主机字节序&#xff08;大小端设备&#xff09;list…

TensorFlow之过拟合与欠拟合-2

1 基本概念 过度拟合&#xff08;overfit&#xff09; 正则化&#xff08;regularization&#xff09; L1正则化&#xff08;L1 regularization&#xff09; L2正则化&#xff08;L2 regularization&#xff09; 删除正则化&#xff08;dropout regularization&#xff09…