h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
margin-top: 0;
padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
color: #4183C4;
text-decoration: none;
}

a:hover {
text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
padding-left: 30px;
}

ul li > :first-child,
ol li > :first-child,
ul li ul:first-of-type,
ol li ol:first-of-type,
ul li ol:first-of-type,
ol li ul:first-of-type {
margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
margin-bottom: 0;
}

dl {
padding: 0;
}

dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px;
}

dl dt:first-child {
padding: 0;
}

dl dt>:first-child {
margin-top: 0px;
}

dl dt>:last-child {
margin-bottom: 0px;
}

dl dd {
margin: 0 0 15px;
padding: 0 15px;
}

dl dd>:first-child {
margin-top: 0px;
}

dl dd>:last-child {
margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
font-size: 12px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
margin: 0 0px;
padding: 0px 0px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px;
}

pre>code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}

pre {
background-color: #f8f8f8;
border: 1px solid #ccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}

pre code, pre tt {
background-color: transparent;
border: none;
}

kbd {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #DDDDDD;
background-image: linear-gradient(#F1F1F1, #DDDDDD);
background-repeat: repeat-x;
border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
border-image: none;
border-radius: 2px 2px 2px 2px;
border-style: solid;
border-width: 1px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
line-height: 10px;
padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
border-left: 4px solid #DDD;
padding: 0 15px;
color: #777;
}

blockquote>:first-child {
margin-top: 0px;
}

blockquote>:last-child {
margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
clear: both;
margin: 15px 0;
height: 0px;
overflow: hidden;
border: none;
background: transparent;
border-bottom: 4px solid #ddd;
padding: 0;
}

/* TABLES
=============================================================================*/

table th {
font-weight: bold;
}

table th, table td {
border: 1px solid #ccc;
padding: 6px 13px;
}

table tr {
border-top: 1px solid #ccc;
background-color: #fff;
}

table tr:nth-child(2n) {
background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
max-width: 100%
}
-->

传统数据库中,我们要操作数据库数据都要书写大量的sql语句,而且在进行无规则数据的存储时,传统关系型数据库建表时对不同字段的处理也显得有些乏力,mongo应运而生,而且ajax技术的广泛应用,json格式的广泛接受,也使得mongo更贴近开发人员。


mongo简介及应用场景

MongoDB是一个面向文档的非关系型数据库(NoSQL),使用json格式存储。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。

mongo能应用在如下场景:

  • 存储大尺寸、低价值的数据
  • json及对象类型数据
  • 网站缓存数据
  • 评论、子评论类有明显从属关系数据
  • 多服务器数据,其内置的MapReduce很容易现实全局遍历。

安装和使用mongodb

我们在官网 https://www.mongodb.org/ 上可以下载到其最新稳定版本 ,mongo是官方已经编译好的,解压后即可使用其命令都在bin目录下。

使用前首先配置mongo.conf文件

port=xxxxx                                  //代表端口号,如果不指定则默认为 27017
dbpath=/usr/local/mongodb/db //数据库路径
logpath=/usr/local/mongodb/logs/mongodb.log //日志路径
logappend=true //日志文件自动累加,而不是覆盖
fork=ture //以守护进程方式创建

数据库和数据表都可以直接创建,即不用切换,直接使用,使用时即创建,mongo里还可以直接写js脚本,可直接运行,mongo中如果不指定_id字段,mongo会自动添加一个。


mongo的各种命令

mongo的命令是其精髓,这些十分复杂的命令集合在一块,使得mongo的查询变得绚丽而高效。mongo内的每个表称作一个collection(集合),使用命令类似于MySQL,切换到数据库内直接对每一个collection操作。其命令由方法(func())、查询体(写在{}里)和操作符(由$开头)组成。

基本命令

show dbs                                //查看数据库
use dbname //切换到数据库
db.createCollection('collection') //创建数据表
db.collection.drop() //删除数据表
db.dropDatabase() //删数据库
db.collection.insert({data}) //插入数据
db.collection.find() //显示数据表内全部内容

查询体

{key.attr.attr:value}                                       //普通式
{key:{$ne|$gt|$gte|$lt|$lte|$in|$nin|$all:value}} //key满足 $oper value的值
{$or|$and|$not|$nor:[{key1:{$gt:value}},{key2:{$ne:value}}]} //用$oper同时限定key1,key2的条件
{key:{$mod{8,2}}} //取出key对8取余为2的值。
{key:{$exist:1}} //取出key列存在的值。
{key:{$type:String|Double|Array|Date|Object|Boolean|......}}//查询key类型为type的列
{key:{$regex:/pattern/}} //通过正则查询,效率较低
{$where:'this.attr.express.....'} //直接用where语句,二进制转为JS运算,较慢

find()方法增强

db.collection.find(query,{要取出的列:1,不需要的列:0})
db.collection.find(query).skip(跳过的行数).limit(限制信息条数);
db.collection.find(query).explain() //与MYSQL的解释语句一样。
db.collection.remove(query,[justone]) //如不指定query,全部删除;[justone]默认为false意思是查询到多个,但只删一个。

update语句

db.collection.update(query,{key:newvalue})   //注意:新值会覆盖旧值,即数据只剩下语句中定义的key
db.collection.update(query,
{
$set:{key:newvalue},
$unset:{key:value},
$rename:{key:value},
$inc:{key:value},
......
},
{
multi:true, //改变所有符合条件的,默认为false
upsert:true //没有的话刚添加,默认为false
}
)

游标

var cursorName=db.collection.fund(query,...)[.skip(num).limit(num)] //创建游标
cursorName.hasNext() //判断是否有下一个
printjson(cursorName.next()) //输出游标的下一个指向值
cursorName.forEach(function(Obj){process Obj}) //遍历操作游标

索引

db.collection.getIndexes()                  //查看索引
db.collection.ensureIndex({key:1/-1[,key.attr:1/-1]},{unique:1(是否唯一)},{sparse:1(是否非空)})// 添加正序/倒序索引
db.collection.dropIndex({key:1/2}) //删除索引
db.collection.reIndex() //重建用了很多出现杂乱的索引

MapReduce

MapReduce是mongo中内置的一个非常强大的遍历操作工具,使用它需要实现它的map和reduce两个函数

db.runCommand(
{
mapReduce: collection, //要操作的数据表
map: function(){emit(key1,key2)}, //对key1和key2进行数据映射
reduce: function(key,value){}, //对key值和数据组value进行操作
out: <output>,
query: <document>,
sort: <document>,
limit: <number>,
finalize: <function>,
scope: <document>,
jsMode: <boolean>,
verbose: <boolean>
}
)

更多更详细的命令可以在mongo的中文社区 http://docs.mongoing.com/manual-zh/ 找到。


mongo的用户、数据导入导出和集群

用户管理

MongoDB默认不开启授权。可以在开启服务器时添加 --auth 或者 --keyFile 选项开启授权。使用配置文件的话,使用 security.authorization 或 security.keyFile 设置。

MongoDB提供 自带角色, 每一个角色都为一种常见用例提供一个明确的作用。例如 read, readWrite, dbAdmin, 和 root 等角色。我们通过创建用户,创建角色,给用户分配/回收不同的角色来进行用户管理。

添加角色时要先在admin数据库中添加一个管理员角色,然后使用管理员角色在每个库添加不同的角色。

use admin;(切换到admin数据库,对此库操作)
db.createUser(
{
user: "username",
pwd: "password",
roles:
[
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
}
)
use database;
db.auth('username','passwd');用超级管理员用户登陆后,整个mongo数据库皆可存取。

数据导入导出

我们使用mongo自带的工具进行导入导出,在mongo/bin目录下,最好导出csv格式,便于数据交换。

./mongoexport -d dataname -c tablename -f key1,key2 -q 'query' -o ainname --csv//导出数据,默认为json格式
./mongoimport -d dataname -c tablename --type json --file ./path //导入数据,默认为json格式

mongo数据库集群

  1. 打开mongod时添加选项 --replSet replname;
  2. 在mongo客户端连接上一个mongod进程,进入admin数据库,然后声明mongoconf变量:

    use admin;
    var rsconf={_id:'replname',members[{_id:0,host:'xxx'},{_id:1,host:'xxy'}]};
  3. 用rs.initiatee(rsconf);来初始化集群,mongo会自动将id号小的设为primary,其他的mongod进程为secondary。

  4. 连接secondary进程,使用slaveOk()函数,来初始化从进程。

PHP中操作mongo数据库

我们先为php添加mongo扩展(方法可看linux下的PHP)。然后,我们便可以在脚本中使用mongo类函数库了。

不同于其他的类库只有一个核心类,mongo有四个类,分别是:

  • Mongo类,基础类,拥有连接、关闭连接、对全局数据库的操作方法。
  • mongoDB类,邮Mongo类通过selectDB()方法得到,拥有表级的操作方法。
  • MongoCollection类,一般由Mongo->dbname->collection或直接用MongoDB类和数据库名实例化得到,拥有对数据的基本操作。
  • MongoCursor类,由MongoCollection通过find()方法得到,拥有普通的游标遍历操作。

以下是一个典型的mongo操作:

$mongo=new Mongo();
$mongo->connect('host',port);
$collection=$mongo->dbname->collection;
$cursor=$collection->find();
$cursor->operate();
$mongo->close();

如果您觉得本博文对您有帮助,您可以推荐或关注我,如果您有什么问题,可以在下方留言讨论,谢谢。

PHP中的数据库四、mongodb的更多相关文章

  1. 在Docker中体验数据库之Mongodb

    本文记录一下,在docker中安装Mongodb的过程. 环境:物理机 ubuntu18.04 因为环境变了,我在一台物理机上直接安装了ubuntu(非虚拟机和双系统),制作U盘镜像.安装参考:htt ...

  2. 在nodejs中操作数据库(MongoDB和MySQL为例)

    一.使用nodejs操作MongoDB数据库 ①使用官方的mongodb包来操作 ②使用第三方的mongoose包来操作(比较常用) // 首先必须使MongoDB数据库保持开启状态 // npm下载 ...

  3. 在Docker中体验数据库之MySql

    在上一篇在Docker中体验数据库之Mongodb之后,这次记录一下在docker中安装mysql.过程要比Mongodb麻烦一点…… 参考网址: https://dev.mysql.com/doc/ ...

  4. Mongodb-- python中使用pymongo连接mongodb数据库

    一.使用 通过pip或者pychrm下载pymongo模块 import json from pymongo import MongoClient from bson import ObjectId ...

  5. Java中使用MongoUtils对mongodb数据库进行增、删、查、改

    本文主要介绍在java应用中如何使用MongoUtils工具类对 mongodb进行增.删.查.改操作. 一.配置 1.将 common.jar库引入到项目环境中: (源代码:https://gite ...

  6. Docker入门(四)——MySQL镜像中的数据库可视化

      在详细介绍这篇文章的内容前,需要说明下笔者写这篇文章的意图:笔者在现有的开发中,前后端联调的方式为Docker镜像对接,数据库使用MySQL镜像,开发环境为远程服务器,因此,笔者迫切需要一种能将远 ...

  7. NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用

    业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...

  8. node.js操作数据库之MongoDB+mongoose篇

    前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...

  9. NOSQL数据库之MongoDB

    一.NoSQL概述 如今,大多数的计算机系统(包括服务器.PC.移动设备等)都会产生庞大的数据量.其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,​).这些数据有很大一部 ...

随机推荐

  1. TODO:一不顺眼就换字体Go之代码篇

    TODO:一不顺眼就换字体Go之代码篇 image包实现了一个基本的2D图像库,该包中包含基本的接口叫做image,这个里面包含color,这个将在image/color中描述:新增字体font,进行 ...

  2. TODO:一不顺眼就换字体Go之应用篇

    TODO:一不顺眼就换字体Go之应用篇 字体,文字的外在形式特征.就是文字的风格,是文字的外衣.好的字体让人看得舒服,让人更有看.写的欲望哦.2016-11-16 GO官方博客发布了同名Go字体,并没 ...

  3. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...

  4. python property理解

    一般情况下我这样使用property: @property def foo(self): return self._foo # 下面的两个decrator由@property创建 @foo.sette ...

  5. Bootstrap3系列:导航

    1. 标签页 .nav添加.nav-tabs设计标签页,.nav-tabs 依赖 .nav 基类. 1.1 示例代码 <ul class="nav nav-tabs"> ...

  6. 代码的坏味道(11)——霰弹式修改(Shotgun Surgery)

    坏味道--霰弹式修改(Shotgun Surgery) 霰弹式修改(Shotgun Surgery) 类似于 发散式变化(Divergent Change) ,但实际上完全不同.发散式变化(Diver ...

  7. 「译」JUnit 5 系列:架构体系

    原文地址:http://blog.codefx.org/design/architecture/junit-5-architecture/ 原文日期:29, Mar, 2016 译文首发:Linesh ...

  8. 在Ubuntu|CentOS上安装Shutter截图工具及快捷键设置

    简介 Shutter前身叫GScrot,它是一款相当棒的截图软件. 通过Shutter,你可以截取包括选定区域.全屏幕.窗口.窗口内的控件甚至网页的图像.通过内置的强大插件机制,你可以在截图后,对图像 ...

  9. Web Service概念梳理

    计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些 ...

  10. maven之一:maven安装和eclipse集成

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...