本文内容:

  • MongoDB的介绍
  • MongoDB服务端的启动
  • MongoDB客户端连接
  • SQL与MongoDB相关概念解释
  • 什么是BSON
  • 数据库操作
  • 集合操作
  • 文档操作

测试环境:win10

软件版本:3.6.2

首发时间:2018-03-18 15:38


MongoDB的介绍:

  • MongoDB 是由C++语言编写的开源数据库系统。
  • MongoDB 将数据存储为一个文档。MongoDB是一个基于分布式文件存储的数据库。
  • MongoDB的提供了一个面向文档存储,操作起来比较简单和容易
  • 可以在MongoDB记录中设置任何属性的索引
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及
    数组。
  • MongoDB支持多个存储引擎:wireTiger、 MMaPv1等等

MongoDB服务端的启动:

使用mongod命令来启动服务端

  • mongodb常用启动参数

    • --bind_ip:绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP

    • --port:指定服务端口号,默认端口27017

    • --logpath:指定MongoDB日志文件存放路径

    • --dbpath:指定数据库路径【需要指定才能启动成功】

    • --serviceName:指定服务名称 【主要用于安装服务时指定名称】

    • --serviceDisplayName:指定服务名称,有多个mongodb服务时执行。【主要用于安装服务时指定名称】

想获得更多参数信息,可以输入:

  1. mongod --help

  2. mongod -h

将MongoDB服务器作为Windows服务运行:

上面的启动方式需要挂起一个窗口。

如果不想一直挂起一个窗口,也可以将这些启动参数添加到服务中,将mongod作为一个服务启动,这样就不需要那么麻烦了。

输入命令例子如下:

  1. mongod --dbpath "D:\data\db" --logpath "D:\data\log\mongodb.log" --serviceName "mongodb" --serviceDisplayName "mongodb" --install
  • 安装服务必须参数介绍:

    • --install:指示安装成服务
    • --serviceName:指定服务名称
    • --serviceDisplayName:指定服务名称,有多个mongodb服务时执行
    • 其他设置都是可选的,按自己需求来确认是否填写。

这样就只需要在使用的时候启动mongod服务即可。


MongoDB客户端连接:

使用mongo命令来连接服务端。

  1. mongo [options] [db address] [file names (ending in .js)]
  1. 本地服务端可以使用:mongo 或者mongo localhost
  1. 远程的可以使用:mongo IP地址

想获取更多参数设置信息,可以输入一下命令:

  1. mongo --help

  2. mongo -h

SQL与MongoDB相关概念解释:

这个相关概念解释是为了让一些有了SQL学习经验(没有的应该也能了解)的人更快了解MongoDB的结构


什么是BSON:

  • BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
  • BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,
  • BSON有三个特点:轻量性、可遍历性、高效性
  • BSON的例子:{"name":"alex","age":18}
  • BSON支持的数据类型:

数据库操作:

  • 显示所有数据库【注意,数据为空的数据库默认不显示出来】:

    1. show dbs
  • 显示当前数据库对象或者集合:
    1. db
  • 切换数据库,如果数据库不存在就创建数据库再切换到指定数据库:
    1. use 数据库名
  • 创建数据库: use 数据库名
    • 数据库名称可以是任何字符,但是不能包含空字符串,点号(.),或者" "。
    • 默认的数据库为test,如果你没有创建新的数据库,集合将存放在test数据库中
  • 删除数据库:
    • db.dropDatabase():删除当前数据库,建议先用db命令确认一下当前数据库

集合操作:

  • 在mongodb中的集合是无模式的,mongodb中并没有严格的约束插入的数据,集合中存储的文档的结构可以是不同的。

    • 下面的两个文档可以同时存入到一个集合中:{"name":"alex"} {"age":18,"sex":"man"}
  • 集合的命名:

    • 集合名称必须以字母或下划线开头。
    • 集合名可以保护数字
    • 集合名称不能使美元符"$","$"是系统保留字符。
    • 集合的名字 最大不能超过128个字符 。
    • 另外,"."号的使用在集合当中是允许的,它们被成为子集合(Subcollection);
    • 创建集合:
  1. db.createCollection(name, {size: ..., capped: ..., max: ...})
    • name是集合名
    • size,capped,max是可选项:size代表集合大小,capped代表是否限制集合大小(size来设置),max代表集合的最大文档数量
    • 可选项还有很多,想了解更多可以参考官方文档,比如还有storageEngine,collation。。。
  • 查看当前数据库所有集合:

    1. show collections
  • 删除集合:
    1. db.集合名.drop()
  • 修改集合名:

    1. db.集合名.renameCollection()
  • 获取集合帮助信息:

    1. db.集合名.help()

文档操作:

  • 插入文档:

    • db.集合名.insert(document):document是一个BSON格式的。

      1. db.users.insertOne({ name: "sue",age: 19,status: "P"})
    • db.集合名.insertOne(document):document是一个BSON格式的。
      1. db.teacher.insert({name: "sue"})
      2. db.teacher.insert([{"name":"Lili"},{"name":"Alex"}])
    • db.集合名.insertMany([document,document,document……]):document是一个BSON格式的。
      1. db.users.insertMany( [{ name: "bob", age: 42, status: "A", },{ name: "ahn", age: 22, status: "A", },{ name: "xi", age: 34, status: "D", }])
  • 查看数据:

    • db.集合名.find(<query filter>, <projection>)
    • db.集合名.findone(<query filter>, <projection>):只返回一个文档
    • query filter可以有如下:
      • {}:代表返回所有文档,db.集合名.find({}),等价于db.集合名.find()

        1. db.teacher.find()
      • {key1:value1,key2:value2…}:返回key1==value1 and key2==value2的文档;
        1. db.teacher.find({name:"alex"})
        2. db.teacher.find({name:"jack",course:"linux"})
      • { <key1>: { <operator1>: <value1> }, ... }:
        • operator可以有 $lt小于, $gt大于,$gte大于等于, $lte小于等于, $ne不等于

          1. db.class.find({"member":{$gt:5}})
          2. db.class.find({"member":{$gt:5},grade:{$gt:3}})
    • query filter多个条件的and和or:
      • 默认情况多个条件下是and的,多个条件用逗号分开
      • 如果想要使用or:{$or[{<key>:<value>},{<key>:<value>},{<key>:<value>}……]}
      • and和or的联合使用: ({and条件,$or:[or条件]})
        1. db.teacher.find({course:"linux",$or:[{name:"Lili"},{name:"Alex"}]})
    • query filter的条件还可以是类型检测:使用$type来进行类型检测,type检测的类型数字,根据上面BSON类型表中的数值。
      • 筛选出字段数据类型是否是double型的:  $type:1
      • 筛选出字段数据类型是否是string型的:  $type:2
      • 筛选出字段数据类型是否是boolean型的:  $type:8
      • 筛选出字段数据类型是否是Null型的:  $type:10
      • …..其他
    • 如果想要以格式化的方式来查看文档db.集合名.find().pretty()
      • 普通格式:
      • pretty格式:

 

  • 更新文档:

    • 更新文档可以使用下面几个:
      • db.集合名.updateOne(<query>,<update>,{option}):更新单条文档
      • db.集合名.updateMany(<query>,<update>,{option}):更新多条文档
      • db.集合名.update(<query>,<update>,{option}):更新文档,可选单条文档或多条文档
    • query是BSON格式的,作为查找文档的条件 ,query的条件参考上面查找文档中的query filter
    • update是BSON格式的,指明了如何修改文档 ,修改哪些字段
      •   注意,修改字段值需要加上{$set:{"key":"newvalue"}},不然{key:"newvalue"}会替换原来的文档,导致其他字段数据丢失
    • option:
      • upsert是如果对应不存在要修改的数据,是否将新的数据插入。默认是false不插入
      • db.集合名.update()中的multi是默认是false,只更新查找到的第一条文档数据,如果改成true,将更新所有可匹配的文档。
      • writeConcern是抛出异常的级别。

  • 删除数据:

    • db.集合名.remove(query):删除所有符合条件的文档

      • query :删除的文档的条件。如果条件为{},则删除所有文档 ,query可以参考查找文档中的query filter
      • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
      • writeConcern :(可选)抛出异常的级别。

想了解更多可以参考官方文档。https://docs.mongodb.com/manual/reference/bson-types/


MongoDB的基本操作:服务端启动,客户端连接,CRUD操作的更多相关文章

  1. [笨木头FireFly01]入门篇1·最简单的服务端和客户端连接

    原地址:http://www.9miao.com/question-15-53938.html 最近一直在写游戏,几乎没有来写教程了,打算放慢一下脚步,学学新东西.那为嘛我要学FireFly呢? 之前 ...

  2. centos 7安装vnc服务端&vnc客户端连接

    前言 工作需求,需要用到vnc,介绍一下相关内容. 安装vnc服务端 在执行其他相关的之前,需要先安装一下vnc的服务端,命令如下: yum install tigervnc-server 配置vnc ...

  3. [RHEL 7]ISCSI服务端及客户端连接配置

    环境RHEL7.4 1.搭建服务器端主机环境 网络配置 网卡eth0 10.0.0.1 网卡eth1 10.1.0.1 网卡eth2 10.2.0.1 网卡eth3 10.3.0.1 硬盘配置 添加一 ...

  4. zookeeper源码分析之一服务端启动过程

    zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...

  5. Netty源码分析之服务端启动过程

    一.首先来看一段服务端的示例代码: public class NettyTestServer { public void bind(int port) throws Exception{ EventL ...

  6. Netty 服务端启动过程

    在 Netty 中创建 1 个 NioServerSocketChannel 在指定的端口监听客户端连接,这个过程主要有以下  个步骤: 创建 NioServerSocketChannel 初始化并注 ...

  7. Netty 源码(一)服务端启动

    Netty 源码(一)服务端启动 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) ServerBootstap 创建时序图如 ...

  8. 原理剖析-Netty之服务端启动工作原理分析(下)

    一.大致介绍 1.由于篇幅过长难以发布,所以本章节接着上一节来的,上一章节为[原理剖析(第 010 篇)Netty之服务端启动工作原理分析(上)]: 2.那么本章节就继续分析Netty的服务端启动,分 ...

  9. 原理剖析-Netty之服务端启动工作原理分析(上)

    一.大致介绍 1.Netty这个词,对于熟悉并发的童鞋一点都不陌生,它是一个异步事件驱动型的网络通信框架: 2.使用Netty不需要我们关注过多NIO的API操作,简简单单的使用即可,非常方便,开发门 ...

  10. (二)Netty源码学习笔记之服务端启动

    尊重原创,转载注明出处,原文地址:http://www.cnblogs.com/cishengchongyan/p/6129971.html  本文将不会对netty中每个点分类讲解,而是一个服务端启 ...

随机推荐

  1. iOS之Settings.Bundle的应用

    Settings.Bundle Settings.Bundle支持六种配置项分别是:Title,MultiValue,Group,Slider,ToggleSwitch,TextField . Tit ...

  2. (转)mtr命令详解诊断网络路由

    原文:https://blog.51cto.com/6226001001/1941355 http://www.zzbiji.com/2212.html----Linux下使用mtr做路由图进行网络分 ...

  3. Spring Cloud的注册中心和服务者,消费者的构建

    Spring Cloud的注册中心和服务者,消费者的构建 注册中心Eureka: 新建项目stu-eureka: StuEurekaApplication: package com.demo.stue ...

  4. 从零开始学 Web 之 JavaScript(一)JavaScript概述

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  5. Android FileObserver 实现原理(inotify)

    目录 0x0前言 0x01 FileObserver 使用实例 0x02 FileObserver 实现原理 0x04 完整Demo下载地址 0x0前言 之前在分析某个Android平台加固壳子的时候 ...

  6. DenseNet 论文阅读笔记

    Densely Connected Convolutional Networks 原文链接 摘要 研究表明,如果卷积网络在接近输入和接近输出地层之间包含较短地连接,那么,该网络可以显著地加深,变得更精 ...

  7. JavaWeb学习 (十六)————JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  8. set get del

    //设置 $ob = new Redis(); $ob->connect('127.0.0.1', 6379); $re = $ob->set('str1', serialize(['a' ...

  9. Redis持久化存储与复制功能简述

    一.分布式系统基础理论 分布式系统的两个基础理论: 1.CAP理论 如图: Consistency(强一致性):数据一致更新,所有数据变动都是同步的.Availability(可用性):好的响应性能. ...

  10. SpringBoot入门之Thymeleaf的使用

    在.net的MVC3 或更高版本等支持 Razor 的框架里使用cshtml,Razor是一种简单的编程语法,用于在网页中嵌入服务器端代码.在使用springboot开发mvc时也有与.net类似的视 ...