mongodb数据库使用01、基础查询和数据类型介绍
01、windows安装
--下载mongodb数据库,点击安装。配置环境即可
02、基本使用:启动 退出
!!!!!!在此之前一定要配置环境变量
!!!!!!如果之前多次配置其他数据库,这里应该基本不变。尤其和redis配置安装一模一样
--启动mongodb服务:mongod --config 配置文件.conf--进入mongo shell命令:mongo即可--退出:exit
03、基本使用:创建和删除数据库
--pip install pymongo 安装将要用于连接mongdb的python模块--数据库操作:--db 直接查看当前所在数据库,默认在test数据库--show dbs / show databases 查看有哪些数据库--use db_name 选择数据库--注:这里查看数据库会发现没有test数据库,是因为show dbs查看的是磁盘上的数据库,test数据库是存在于内存中的--数据库插入:--use python 创建一个名为python的数据库,记住此时查看是看不到python数据库的。因为还没有往其中插入数据--db.python.insert({"key":"value"}) 往数据库插入数据对 key : value--删除当前数据库:--db.dropDatabase() 此时当前数据库就会被删除,再次查询就不复存在了。但是此时如果使用db命令还是能够查到数据库名称,因为只是从磁盘中删去了,内存中仍然保留该数据库
04、mongo集合使用·
--查看集合--show collections 如果没有则显示为空,如果有则会显示当前正在使用的数据库--创建集合--db.createCollection(name, options) # 创建集合--name: 集合名称--options: 集合属性,这里注意options属于字典的注释部分,即文档。没有引号包裹键值对--示例:--db.createCollection("nor_cum") 创建集合 nor_cum--db.createCollection("cap_col", {capped:true,size:10})--capped: 为false表示不设置上线;true表示设置上线--size:集合所占字节数,默认最小字节数为256;小于256个字节则自动设置为256字节;大于256以具体实际值为准;如果数据超过内存以后,后输入的数据会把前面输入数据的位置挤占走--查看创建的集合的capped属性--db.cap_col.isCapped() 默认为false,如果设置了则为设置值--集合nor_cum插入两组值:--db.nor_cum.insert({"name":"孙策", "title":"东吴小霸王", "age":19, "wife":"大乔", "num":1})-- db.nor_cum.insert({"name":"周瑜", "title":"大都督", "age":30, "wife":"小乔", "num":2})--查看集合nor_cum中的两条数据:--db.nor_cum.find()--清屏:cls / ctrl + l
--固定大小的日志可以用于日志记录的保存,后输入的日志会挤占前面输入的日志,正好满足我们对于日志时间冗余的要求。
05、mongo数据类型
--mongodb数据库常见数据类型如下所示:- Object ID: 文档ID/数据的ID,数据的主键- String: 字符串,最常用,必须是有效的UTF-8- Boolean: 存储一个布尔值,true或false- Integer: 整数可以是32位或64位,这取决于服务器- Double: 浮点数- Arrays: 数组/列表- Object: mongodb中的一条数据/文档,即文档嵌套文档- Null: 存储null值- Timestamp: 时间戳,表示从1970-1-1到现在的总秒数- Date: 存储当前日期或时间的UNIX时间格式--关于objectID的说明:--每个文档都有一个属性,为_id,保证每个文档的唯一性,mongodb默认使用_id作为主键--可以手动设置_id的值,如果没有提供,那么MongoDB为每个文档提供了一个独特的_id, 类型为objectID--objectID是一个12字节的十六进制数,每个字节两位,一共是24位的字符串:--这里 1个字节 <==> 2位数据--前4个字节为当前时间戳--接下来3个字节的机器ID--接下来的2个字节中MongoDB的服务进程id--最后3个字节是简单的增量值
06、mongodb的数据插入:单条 和 批量插入
--单条数据插入:--db.nor_cum.insert({"name":"yang", "age":39, "class":1, "num":1})--db.nor_cum.insert({"name":"sun", "age":18, "class":2, "num":2})--批量插入数据:使用列表包裹字典的形式批量插入数据--db.nor_cum.insert([{"name":"yang", "age":39, "class":1, "num":1}, {"name":"sun", "age":18, "class":2, "num":2}])--插文档时,如果不指定_id参数,MongoDB会为文档自动分配一个唯一的ObjectId --db.stu.insert({_id:"20170101", name:'gj', gender:1})--插入时不建议指定id,最好由系统指定
07、monggo中集合的数据保存:save
--命令:db.集合名称.save(document)--举例:db.stu.save({_id:'20170101', name:'gj', gender:2})--这里如果按照_id寻找的话,找到一样的就更新;找不到就插入。即,save兼具更新和插入的功效--更新【modified】:WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })db.stu.save({name:'gj', gender:2})db.stu.find()
08、mongo查询find:
--测试数据:
db.stu.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true },
{"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false },
{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false },
{"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : true },
{"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : true },
{"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : true },
{"name" : "洪七公", "hometown" : "华筝", "age" : 18, "gender" : true }])--虽简单的查询:db.集合名.find() 这种方式查询出来的是集合中的所有数据,不加参数- 方法find(): 查询`db.集合名称.find({条件文档})`- 方法findOne():查询,只返回第一个`db.集合名称.findOne({条件文档})`- 方法pretty(): 将结果格式化;不能和findOne()一起使用!`db.集合名称.find({条件文档}).pretty()`
--查询中的比较运算符
- 等于: 默认是等于判断, 没有运算符
- 小于:`$lt (less than)`
- 小于等于:`$lte (less than equal)`
- 大于:`$gt (greater than)`
- 大于等于:`$gte`
- 不等于:`$ne`--示例:--查询年龄大于18的所有学生--db.stu.find({age:{$gte:18}})--查询年龄等于18的人员--db.stu.find({age:18})
--逻辑运算符:--and:在json中写多个条件即可示例如下:--查询年龄大于或等于18, 并且性别为true的学生--db.stu.find({age:{$gte:18},gender:true})--or:使用$or, 值为数组, 数组中每个元素为json示例如下:--查询年龄大于18, 或性别为false的学生--db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})--查询年龄大于18或性别为男生, 并且姓名是郭靖--db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
--范围运算符:--使用`$in`, `$nin` 判断数据是否在某个数组内代码示例:--查询年龄为18、 28的学生--db.stu.find({age:{$in:[18,28,38]}})--查找家乡为蒙古 大理的数据--db.stu.find({"hometown":{$in:["蒙古", "大理"]}})--查找加像不为蒙古 大理的数据--db.stu.find({"hometown":{$nin:["蒙古", "大理"]}})
--正则表达式:--使用$regex编写正则表达式--代码示例:--查询name以'黄'开头的数据--db.stu.find({name:{$regex:'^黄'}})
--自己编写函数过滤数据--mongo shell 是一个js的执行环境--使用$where 写一个函数, 返回满足条件的数据代码示例:--查询年龄大于30的学生:--db.stu.find({$where:function() {return this.age>30;}})
09、mongo查询结果的操作 -- 区别于08查询操作本身
--limit限制查询数量:db.stu.find().limit(1) 这里限制数量为1--skip:表示略过前多少个数据db.stu.find().skip(1) 略过第一个数据不返回# 实现分页效果 -- 组合使用limit 和 skip
# 这里将查询结果分页,一页3条数据
# 这里skip 和 limit互换位置不影响,因为limit优先级低于skip--db.stu.find().skip(0).limit(3)--db.stu.find().skip(3).limit(3)--db.stu.find().skip(6).limit(3)--db.stu.find().skip(9).limit(3)
--投影:其实就是查出数据指定展示某些字段--查出数据,选择展示 name 和 age两个字段--db.stu.find({}, {"name":1, "age":1})--这种选择性展示:不能设置1的同时再设置0--db.stu.find({}, {"name":1, "age":0})--这种选择性展示可以选择展示1 或者 选择不展示0--db.stu.find({}, {"name":1, "age":1})--db.stu.find({}, {"name":0, "age":0})--_id属于独特的一个字段,可以随意设置0 或 1,可以和其他字段选择性展示在一起--db.stu.find({}, {"_id":0, "name":1, "age":1})
--排序:sort 用于对查询结果按照指定的字段进行排序--命令:`db.集合名称.find().sort({字段:1,...})`--参数1为升序排列--参数-1为降序排列--代码示例如下: --根据性别降序, 再根据年龄升序--db.stu.find().sort({gender:-1,age:1})
--统计个数:方法count()用于统计结果集中文档条数命令:`db.集合名称.find({条件}).count()`命令:`db.集合名称.count({条件})`--示例如下:--db.stu.find({gender:true}).count()--db.stu.count({age:{$gt:20},gender:true})
--去重:db.集合名.distinct("字段名")--示例代码:--db.stu.distinct("hometown")--[ "蒙古", "桃花岛", "大理", "华筝" ]--db.stu.distinct("hometown", {age:18})--查出18岁的员工并去重
mongodb数据库使用01、基础查询和数据类型介绍相关推荐
- python操作MongoDB数据库(1)查询
对于用爬虫爬取下来存储到MongoDB数据库中的数据,为了使用这些数据,我们应该得知道一些python对于MongoDB的一些操作.本文只涉及操作,对于数据库的安装和启动暂不涉及.本文参考了他的文章 ...
- mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客
第1章 MongoDB的基本操作 1.1 查询帮助信息 > help db.help() help on db methods db.mycoll.help ...
- SpringBoot整合MongoDB数据库并实现基础CRUD
MongoDB安装教程:MongoDB数据库安装以及将MongoDB设置为系统服务 MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.旨为WEB应用提供可扩展的高性 ...
- mysql数据库邮箱什么类型_MySQL的数据类型介绍
MySQL的数据类型介绍 发布时间:2020-06-01 20:57:09 来源:亿速云 阅读:154 作者:鸽子 由于Mysql独有的特性和实现细节对性能的影响是很明显的,因为做好Mysql数据库的 ...
- mongo go 查询指定字段_Go语言 操作MongoDB数据库批量查询
数据操作是编程中避免不了的操作,这也就牵扯到了数据库的增删改查,而实际工作中我们最常用到的是增改查.今天要介绍的是Go 语言查询MongoDB数据库. 操作mongodb使用的包是"http ...
- mongodb 搜索速度_初识 MongoDB 数据库
初识 MongoDB 数据库 前言 Flask 基础框架在之前的三篇文章中写完了.想要学习 web 相关的同学可以自己回顾翻一下,相信看完了,你也可以写出来一个简单的小案例来炫耀一波! 说到 web ...
- MongoDB数据库操作---终端操作
初识MongoDB 概念: 特点 相关安装 我这边用的是MAC版本 在使用mongodb之前,我们需要给它配置一个macOS缺失的软件包管理器,叫做HomeBrew,链接是:HomeBrew 对应的, ...
- 墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)
今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL手工注入漏洞测试(MongoDB数据库). 一.题目简介 我们这里采用墨者学院的MongoDB数据库渗透测试题目,其地址为:https:/ ...
- SpringBoot2.0 基础案例(15):配置MongoDB数据库,实现增删改查逻辑
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.NoSQL简介 1.NoSQL 概念 NoSQL( Not O ...
最新文章
- 逻辑模型三要素-数据结构
- 关于小程序授权地理位置(wx.getLocation + 用户体验)
- java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?
- 分别标记区段的 飞鸽传书 左、右端
- iOS 权限判断 跳转对应设置界面
- java development kie_java – 直接从存储库加载Drools/KIE Workbench工件
- Android学习笔记----SQLiteDatabase 自带添加、删除、更新、查询的操作方法:实现添加,删除,更新,查询,和分页,统计
- MongoDB独特查询
- 我的第一个Java程序和Java简介
- SpringBoot+Thymeleaf+ECharts实现大数据可视化(基础篇)
- AB1562_UT软件分辨真假洛达1562A,洛达1562a怎么鉴别?
- 三星手机GT-S7898连不上电脑,无法调试
- Apache 服务器特点
- sftp访问提示Connection closed
- 《富爸爸穷爸爸》第一课
- Linux Base VIII 压缩和解压缩命令
- 京训钉怎么快速看完_在钉钉用培训机构CRM管理系统,助力协同办公一体化
- Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权
- ERP工程师做什么?
- extjs 引入html页面,Extjs嵌入html