环境
  MongoDB4.0
  win7_x64
  CentOS6.5_x64

一、MongoDB简介
(1)MongoDB使用C++开发。
(2)MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
(3)MongoDB 将数据存储为一个文档。MongoDB是一个基于分布式文件存储的数据库。
(4)MongoDB使用BSON作为数据存储和传输的格式。BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。
(5)MongoDB很像MySQL,collection对应MySQL的table,document对应MySQL的row。官方给自己的定义是Key-value存储(高性能和高扩展)和传统RDBMS(丰富的查询和功能)之间的一座桥梁。

(6)MongoDB 不支持事务;

(7)MongoDB索引在内存中,而且创建受一定限制;
  
二、安装
1、win7安装

(1)官网下载:mongodb-win32-x86_64-2008plus-ssl-4.0.11.zip
(2)解压:D:\mongoDB4.0


(3)通过服务安装,通过控制台安装:

进入目录:D:\mongoDB4.0\bin,启动cmd:

mongod --bind_ip 127.0.0.1 --logpath "D:\mongoDB4.0\log\mongodb.log" --logappend --dbpath "D:\mongoDB4.0\data\db" --port  --serviceName "MongoDBService" --serviceDisplayName "MongoDB" --install

下表为mongodb启动的参数说明:

参数 描述
--bind_ip 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath 定MongoDB日志文件,注意是指定文件不是目录
--logappend 使用追加的方式写日志
--dbpath 指定数据库路径,注意:MongoDB默认使用db目录作为数据存储目录,但是这个目录需要手工创建,这里我们创建的是:D:\mongoDB4.0\data\db
--port 指定服务端口号,默认端口27017
--serviceName 指定服务名称
--serviceDisplayNam 指定服务名称,有多个mongodb服务时执行。
--install 指定作为一个Windows服务安装。

(4)启动服务:

启动:net start MongoDBService
停止:net stop MongoDBService

(5)MongoDB后台管理 Shell

mongo

退出:exit

参考:window平台安装 MongoDB

2、Linux安装

(1)官网下载:mongodb-linux-x86_64-4.0.12.tgz
(2)解压:

[root@node102 src]# tar -zxvf mongodb-linux-x86_64-4.0..tgz -C /usr/local

(3)安装:

首先创建数据目录和日志目录:

[root@node102 mongodb-linux-x86_64-4.0.]# cd /usr/local/mongodb-linux-x86_64-4.0. && mkdir -p ./data/db ./log 

注意:/data/db 是 MongoDB 默认的启动的数据库路径,如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。

然后执行启动命令:

[root@node102 mongodb-linux-x86_64-4.0.]# cd ./bin && ./mongod --dbpath=/usr/local/mongodb-linux-x86_64-4.0.12/data/db --logpath=/usr/local/mongodb-linux-x86_64-4.0.12/log/mongodb.log --fork
--09T15::59.686+ I STORAGE [main] Max cache overflow file size custom option:
about to fork child process, waiting until server is ready for connections.
forked process:
child process started successfully, parent exiting

注意:

--fork:后台启动

(4)MongoDB后台管理 Shell,可以配置环境变量/etc/profile

[root@node102 bin]# ./mongo
MongoDB shell version v4.0.12
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("dd068bb5-ddaf-4709-acb4-1f5e3bd6ff40") }
MongoDB server version: 4.0.
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
--09T15::59.745+ I STORAGE [initandlisten]
--09T15::59.745+ I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
--09T15::59.745+ I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
--09T15::00.463+ I CONTROL [initandlisten]
--09T15::00.463+ I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
--09T15::00.463+ I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
--09T15::00.463+ I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
--09T15::00.463+ I CONTROL [initandlisten]
--09T15::00.463+ I CONTROL [initandlisten] ** WARNING: This server is bound to localhost.
--09T15::00.463+ I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server.
--09T15::00.463+ I CONTROL [initandlisten] ** Start the server with --bind_ip <address> to specify which IP
--09T15::00.463+ I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to
--09T15::00.463+ I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the
--09T15::00.463+ I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning.
--09T15::00.463+ I CONTROL [initandlisten]
--09T15::00.463+ I CONTROL [initandlisten]
--09T15::00.463+ I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
--09T15::00.463+ I CONTROL [initandlisten] ** We suggest setting it to 'never'
--09T15::00.463+ I CONTROL [initandlisten]
--09T15::00.463+ I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
--09T15::00.463+ I CONTROL [initandlisten] ** We suggest setting it to 'never'
--09T15::00.463+ I CONTROL [initandlisten]
> + > exit
bye
[root@node102 bin]#

(5)关闭

(5.1)在mongo客户端关闭

> use admin
> db.shutdownServer()

(5.2)使用mongod,注意关闭哪个数据库 需要指定对应的--dbpath

[root@node102 bin]# ./mongod --dbpath=/usr/local/mongodb-linux-x86_64-4.0./data/db --shutdown

参考:Linux平台安装MongoDB

注意:mongoDB4好像不再支持web用户界面。

三、MongoDB存取原理
内部执行引擎为JS解释器(解释符合JS语法的语句):
插入操作:把JSON对象数据存储成BSON结构的文档结构,
查询操作:把BSON结构数据转换为JSON对象.

四、MongoDB和关系型数据库区别

参考:MongoDB 概念解析

 package com.mongodb;

 import java.util.HashMap;
import java.util.Map; import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId; import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase; public class TestMongoDB { public static void main(String[] args)
{
TestMongoDB test = new TestMongoDB();
//插入数据
test.insertData();
//查询数据
test.find();
test.findone();
//更新数据
test.update();
//删除数据
test.delete();
} public void find()
{
//创建连接客户端
MongoClient client = new MongoClient("localhost",27017);
//获取数据库对象
MongoDatabase db = client.getDatabase("test");
//获取操作的集合对象
MongoCollection<Document> collection = db.getCollection("wjy");
//具体操作
FindIterable<Document> it = collection.find();
//获取游标对象
MongoCursor<Document> cursor = it.iterator();
while (cursor.hasNext())
{
//取出每一个文档对象(行)
Document doc = cursor.next();
String name = doc.getString("name");
if ("乔峰".equals(name))
{
Integer age = doc.getInteger("age");
System.out.println(name+","+age);
}
else
{
Double age = doc.getDouble("age");
System.out.println(name+","+age);
} }
//释放资源
cursor.close();
client.close();
} public void findone()
{
MongoClient client = new MongoClient("localhost",27017);
//获取数据库对象
MongoDatabase db = client.getDatabase("test");
//获取操作的集合对象
MongoCollection<Document> collection = db.getCollection("wjy");
//具体操作
Bson filter = new BasicDBObject("_id", new ObjectId("5850eacd7065f52b0eab7ff4"));
FindIterable<Document> it = collection.find(filter);
//获取游标对象
MongoCursor<Document> cursor = it.iterator();
while (cursor.hasNext())
{
//取出每一个文档对象(行)
Document doc = cursor.next();
String name = doc.getString("name");
if ("乔峰".equals(name))
{
Integer age = doc.getInteger("age");
System.out.println(name+","+age);
}
else
{
Double age = doc.getDouble("age");
System.out.println(name+","+age);
} }
//释放资源
cursor.close();
client.close();
} public void insertData()
{
MongoClient client = new MongoClient("localhost",27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("wjy");
//使用Map来封装json数据
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "乔峰");
map.put("age", 35);
map.put("gender", "true man");
Map<String,Object> hobbyMap = new HashMap<String,Object>();
hobbyMap.put("girl", "阿朱");
hobbyMap.put("gongfu", "降龙十八掌");
map.put("hobby", hobbyMap);
Document doc = new Document(map); collection.insertOne(doc); client.close();
} public void update()
{
MongoClient client = new MongoClient("localhost",27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("wjy"); Bson filter = new BasicDBObject("_id",new ObjectId("5850eacd7065f52b0eab7ff4")); Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "张无忌");
map.put("age", 35);
Bson update = new BasicDBObject(map); collection.updateOne(filter, new BasicDBObject("$set",update)); client.close();
}
public void delete()
{
MongoClient client = new MongoClient("localhost",27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("wjy"); collection.deleteOne(new BasicDBObject("_id",new ObjectId("5850eacd7065f52b0eab7ff4"))); client.close();
}
}

参考:
官方网站:http://www.mongodb.org/
MongoDB教程:https://www.w3cschool.cn/mongodb/mongodb-intro.html
  

NOSQL学习之二:MongoDB的更多相关文章

  1. NoSQL学习一:MongoDB下载与安装

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...

  2. Mongodb学习笔记二(Mongodb基本命令)

    第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...

  3. MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"

    如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...

  4. NoSQL学习二:MongoDB基本管理命令

    MongoDB命令学习  一.MongoDB命令帮助 在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控: 这是MongoDB最上层 ...

  5. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  6. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  7. redis学习教程二《四大数据类型》

    redis学习教程二<四大数据类型>  四大数据类型包括:字符串    哈希    列表   集合一 : Redis字符串         Redis字符串命令用于管理Redis中的字符串 ...

  8. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

随机推荐

  1. 预编译 ASP.NET 网站以进行部署

    预编译 ASP.NET 网站以进行部署和更新 打开一个命令窗口并定位到包含 .NET Framework 的文件夹. .NET Framework 将安装在以下位置. %windir%\Microso ...

  2. null类型

    null类型只有一个特殊的值null   null值表示一个空对象指针. var car = null; alert(typeof null);//object   undefined派生自null ...

  3. 服务器群秒级别文件同步(ssh+SHELL)

    1.介绍 \ 2.业务服务器远程更新浏览服务器文件的脚本 #!/bin/bash operate=$ ip=$ conf_file="/var/www/html/test/ip_list&q ...

  4. thinkCMF----路由跳转

    使用ThinkCMF的时候,在模板界面上,可能会用到一些自定义路由,ThinkCMF路由的基本配置与用法: ThinkCMF自带有路由美化的功能: 这种路由都是当你创建栏目或创建文章的时候,自动生成的 ...

  5. jqGrid 中的editrules来自定义colModel验证规则

    editrules    editrules是用来设置一些可用于可编辑列的colModel的额外属性的.大多数的时候是用来在提交到服务器之前验证用户的输入合法性的.比如editrules:{edith ...

  6. ch 与等宽字体

    难题 有的时候,特别想通过字符来判断元素的长度,比如: 多行文本溢出时,文字变省略号 文字一个个的显示 效果分别如下: 第一种情况下,如果可以通过字符的数量判断长度是否溢出,从而把最后几个字符替换成省 ...

  7. TOP100summit:【分享实录】Twitter 新一代实时计算平台Heron

    本篇文章内容来自2016年TOP100summit Twitter technical lead for Heron Maosong Fu 的案例分享. 编辑:Cynthia Maosong Fu:T ...

  8. 视觉slam十四讲开源库安装教程

    目录 前言 1.Eigen线性代数库的安装 2.Sophus李代数库的安装 3.OpenCV计算机视觉库的安装 4.PCL点云库的安装 5.Ceres非线性优化库的安装 6.G2O图优化库的安装 7. ...

  9. 疯狂java讲义 第三版 笔记

      java7新加特性: 0B010101  二进制数 int c=0B0111_1111;   数值中使用下划线分隔 switch 支持String类型   字符串常量放在常量池 String s0 ...

  10. Redis is loading the dataset in memory

    Redis is loading the dataset in memory During handling of the above exception, another exception occ ...