MongoDB学习(1)

Wesley13
• 阅读 657

知识点:

  1-MongoDB 安装,启动和卸载

  2-基本概念

  3-基本的增删改查操作(CURD)


   来回顾总结一把学习的mongodb,如果有javascript基础,学习"芒果DB"还是很好理解的,如果会使用mysql,那就更容易了。

  mongodb是一个介于nosql数据库和mysql数据库之间的一个数据存储系统。Mongo的特点是他支持的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

  特点:高性能、易部署、易使用,存储数据非常方便

  测试环境: win10系统

一. MongoDB 安装,启动和卸载

  1)  这里只做windows中的安装,比较简单容易。

  Step 1:官网下载压缩文件并解压 。现在官网下载要注册比较麻烦,如果想快捷点,可以到mongo网址去下载

         我下载的版本: mongodb-win32-x86_64-v3.4-latest.zip    x86_64则不用管是32位还是64位

     解压以后: 里面有一个bin目录和3个文件。我们需要的就是这个bin目录。

      MongoDB学习(1)

  Step 2: 准备工作,将bin目录复制到想放置的位置。可以创建一个mongodb目录,将bin目录放入。

      MongoDB学习(1)

  **Step 3: ** 准备工作 , 创建一个存放数据的目录如data/  ,再创建一个日志文件如log.txt.  (执行安装命令时就明白为什么要创建了)

           MongoDB学习(1)

      我是在wamp目录下创建了mongodb目录, 和php,mysql在同级目录下。

      我的目录结构大致: /mongodb/bin/      /mongodb/data/     /mongodb/log.txt

  Step 4: 开始安装,在cmd中运行bin目录中的mongod.exe

mongod.exe  --install   --dbpath 数据目录    --logpath 日志文件

1 //安装  下面db和log.txt就是上面准备工作中创建的
2 mongod.exe  --install 
3              --dbpath D:/amp/Mongodb/data/db  
4              --logpath D:/amp/Mongodb/data/log.txt

MongoDB学习(1)

  注: 可以直接将mongod.exe往cmd窗口拖入,这样就不用输入路径了

  Step 5: 启动mongo.   在“运行”中输入 “services.msc” 打开服务窗口,找到mongo项,并启动。(或直接 右键》任务管理器》服务》打开服务)

                MongoDB学习(1)

  Step 6: 测试安装是否成功

    方式1: 在cmd中直接打开mongo的客户端(就像mysql黑窗口),将/bin/mongo.exe拖到cmd中,回车运行

    MongoDB学习(1)

         方式2: 在浏览器中输入   localhost:27017   会看到一句英语提示

    MongoDB学习(1)

    此时mongodb已经安装完成。

2)  安装出错: 无mogoDB服务项

错误描述: 按照上述步骤安装mongodb, 未出现error等错误语句,准备启动mongodb时,在服务中居然没有mongo该服务项??

  原因分析: cmd直接运行的,可能需要管理员运行

最终解决:用管理员身份重新执行安装一次

二. 基本概念

(1) NoSQL : Not Only SQL  ,既非关系型的数据库

     (2) 文档(document) (就是记录)

                         i.              文档 (document) – 相当于 mysql 中的一条记录

                       ii.              格式 ( key / value):   {“name”:”php”, “age”:100}

    (3) 集合(collection) (数据表)

                         i.              集合 (collection) – 相当于 mysql 中的一个表

                       ii.              无须规定任何结构  如{ “name” : “php” } 

    (4) 每个文档(每条记录)都有一个 “_id”属性,唯标识一个文档 (相当于mysql中的自增的主键

    (5) Mongodb 客户端: db  该变量代表所当前连接的数据库

三. 基本的增删改查操作(CURD)

mongodb的客户端打开,其也是一个js的编译器,默认连接的是“test”数据库

MongoDB学习(1)

增删改操作主要用到以下方法:

*增操作:  i***nsert (**添加文档)

      查操作: find (返回所有文档)    findOne (返回一个文档)

           改操作:  u**pdate (**修改文档)

**删除操作: remove (**删除文档)

**(1)*增操作:  i***nsert (添加文档)

 1 // 添加记录
 2 //向集合(用户表)user中添加一条记录
 3 var user={username:"张三",age:18}           //js中声明一个字面量对象一样  (字段名如username不加引号是可以的)
 4 db.user.insert(user)                                 //添加
 5 db.user.find()                                         //查询结果
 6 
 7 -- 向集合user中添加一条日志记录
 8 var blog = {"title":"Mongodb学习",content:"一起来玩一把mongodb","addtime":"2018-01"}
 9 db.user.insert(blog)
10 db.user.find()

MongoDB学习(1)

  说明: 1-字段名(对应js中属性名字) 可以加引号也可以不加引号。不加系统会自动加上

        2- 上面的代码可以直接复制到mongodb客户端直接运行(上述代码中"//"在客户端运行也是注释符)。注意,复制后点击右键自动粘贴上去

     3-  每行语句末尾可以加分号回车,也可以不加直接回车,这个和js是一样的

        4- 执行命令值,也可以不用声明使用变量,直接将值放到函数中也是一样的。如db.user.insert({"username":"张三","age":18})

****(2)查操作: find (返回所有文档)    findOne (返回一个文档)****

//查询记录
db.user.findOne()     //查询出第一条记录
db.user.find()    //查询出所有的记录

//查询出年龄等于18岁所有记录
var user={"username":"张三","age":18};   //准备添加测试数据
var user1={"username":"李四","age":28};
var user2={"username":"王五","age":38};
var user3={"username":"赵六","age":18};
db.user.insert(user);
db.user.insert(user1);
db.user.insert(user2);
db.user.insert(user3);
db.user.find({age:18})//查询出年龄等于18岁所有记录

查询出年龄等于18岁且姓名名是"赵六" 的记录
db.user.find( { age:18,username:"赵六" } )

注意: 字段引号可加可不加,但是如果值是字符串有引号,则查询也必须加上

//下面2条查询是不一样的,如果记录中是整型的18 则最下面的一条是查不到记录的
db.user.find({age:18})  
db.user.find({age:"18"})

MongoDB学习(1)

(3)改操作: 修改记录  update(where,data)  ,  save()

update方法的第一个参数为“查找的条件”,第二个参数为“更新的值”

//修改张三年龄为80
//方式1
db.user.findOne({username:"张三"})
var u=db.user.findOne({username:"张三"})
u.age=20
db.user.save(u);
db.user.findOne({username:"张三"})
//方式2
db.user.update({username:"张三"},{username:"张三",age:18}) //要注意第2个{}值是最终值,如果漏了其他值,则其他未写的值会全部自动删除掉了
db.user.findOne({username:"张三"})

****(4)删除操作: remove (删除文档)

//--删除记录
db.user.remove({});   //删除所有user集合中的数据
//删除age=18的记录
db.user.remove({age:18})  //仅删除user集合中的age=18的记录

旧版本的remove中如果不带参数将删除所有数据,但此版本(新版)中如果不给参数会报错,给一个空值,就可以删除所有记录。删除是很危险的操作,且不可撤回,所以删除一定要谨慎

技巧提示:

  1-在mongodb客户端中可以按: ctrl+l 可以清屏 (这个清空屏幕要知道,清了以后,想看前面的操作结果可就看不到了哦)

       2- 输入: db.help()  会给出一些数据库级操作的帮助。如果要查看集合级的帮助则输入:db.集合名.help()  如:db.user.help()

  3- 如果想像mysql一样快速在黑窗口运行,我们可以将mongo执行目录加入到环境变量中。下次运行则直接敲如: mongo 就可以运行客户端了

本来准备将php支持的配置也写下来,可以在网上编辑文档有点慢。如果能直接导入word就好了。不知道大家是如何快速编辑的。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这