技术分享——mongodb入门(1)

ps:这次分享整理自慕课网、菜鸟教程和搜索引擎

WHAT IS IT?MongoDB 是一个基于分布式文件存储的数据库。

能解决什么问题:分布式,高性能,不用建表(降低开发成本,美滋滋)

环境:ubuntu14.04server,php7.1,apache2

安装:

sudo apt-get install mongodb

开启实例:

Sudo mongod

关闭实例:

db.runCommand(“shutdownServer”)

进入shell:

sudo mongo

基本语法:

插入

use test//如果数据库不存在,自动创建

db.mycollection.insert({x:1,y:2})//如果文档不存在,自动创建

更新:

Update:

myCollection={x:1,y:1}

局部更新:db.myCollection.update({x:1},{$set:{y:99}})

更新不存在的数据:db.myCollection.update({x:1},{y:99},true)

更新多条数据(默认更新匹配到的第一条记录):db.myCollection.update({c:1},{$set:{c:2}},false,true)//第三个参数表示数据不存在不需要创建,倒数第四个true表示批量更新

 

删除:

Remove:

db.mycollection.remove({c:2})//默认删除所有匹配的记录

Drop:

db.mucollection.drop()//删除表

索引:

获取索引:getIndexes()

创建索引:ensureIndex({x:1})//1代表正向排序,-1代表负向排序,此例为单键索引

默认索引:_id

复合索引(当查询条件不只有一个时):ensureIndex({x:1,y:1})

过期索引(有时效性的索引,插入的数据会在设置的时间后被删除,而且这个索引字段的值必须是时间类型,不能使用时间戳,最小时间为60s,就算设置是30s,也会在60s后才删除):db.test_collection.ensureIndex({time:1},{expireAfterSeconds:30})

db.test_collection.insert({time:new Date()})//该数据会在30秒后被删除

全文索引(每个集合只能有一个全文索引):例子{auther:””,title:””,comment:””}

db.test_collection.ensureIndex({auther:”text”})

db.test_collection.ensureIndex({auther:”text”,title:”text”})

db.test_collection.ensureIndex({$**:”text”})

Eg.

db.test_collection2.insert({“article”:”aa bb cc”})

db.test_collection2.find({$text:{$search:”aa”}})

// db.test_collection2.find({$text:{$search:”aa bb”}}) //或查询

// db.test_collection2.find({$text:{$search:”aa -bb”}}) //负号表示不包含该字符串

// db.test_collection2.find({$text:{$search:”\”aa\” \“ bb\””}}) //并查询

// db.test_collection2.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}) //相似度查询


按score排序


Php扩展安装:

第一步:

sudo /usr/bin/pecl install mongodb//安装扩展

/**如果pecl不存在

sudo apt-get install php-pear php7.1-dev

sudo apt-get install pkg-config

sudo apt-get install libpcre3-dev

**/


#Success

第二步:

在php.ini添加“extension=mongodb.so”


查看phpinfo


#success

 

第三步

php操作mongodb

Php部分


文末会有自己写的辣鸡mongo类封装

查看一下


#success


复制集:

1.复制集包括两类节点:数据节点、投票节点(不存储数据)

2.一个复制集有一个主节点,多个从节点(数据节点),用户只能在主节点写操作(记录都oplog),无法对从节点进行写操作(根据oplog来同步,保障了数据的一致性),默认读操作也是对主节点进行的

3.复制集特性

(1)主是唯一的

(2)主节点不是固定的(主节点挂了的话会从从节点中选举出合适的节点当主节点)

(3)大多数原则(复制集的服务器挂一半的时候就没办法选举了,将全部降为从节点,整个复制集只能进行读操作,因为没有主节点了)

4.复制集快速搭建

(1)目录搭建

在mongodb下建立conf,data,log方便管理


(2)配置文件编写



如此类推写三个配置文件

(3)开启三个实例


(3)复制集初始化



将28003变为arbiter节点(选举节点)


初始化(在哪个节点初始化那个节点就会变成主节点)


(4)查看复制集状态



#success

(5)验证复制集同步

在主节点插入数据


在从节点上查看(如果不是通过驱动连接操作的的话要开启slaveOk才能读取数据)

发现出现了主节点创建的数据库了,接着查看数据


数据也同步了

#success

OK~关于mongodb的安装、基本操作、PHP操作、复制集就介绍完了,下一个分享会带上复制集详细介绍和分片技术介绍,大佬们看个乐就好,溜了溜了~


自己写的辣鸡php封装:

<?php
namespace framework\libs\driver;

use MongoDB\Driver\Manager;
use MongoDB\Driver\BulkWrite;
use MongoDB\Driver\Query;

class mongo
{
    private $_conn = null;
    private $_db = null;
    public static $_instance = null;
    private static $_config = ["url" => "mongodb://localhost:27017", "dbname" => "index"];

    /**
     * 创建mongo对象
     */
    static function getInstance(Array $config = array())
    {
        $config = $config ? $config : self::$_config;
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self($config);
        }
        return self::$_instance;
    }

    private function __construct($config)
    {
        try {
            $this->_conn = new Manager($config["url"]);
            $this->_db = $config["dbname"];
        } catch (MongoException $e) {
            exit($e->getMessage());
        }
    }

    /**插入数据
     */

    public function add($collname, array $document)
    {
        $bulk = new BulkWrite;
        $bulk->insert($document);
        return $this->_conn->executeBulkWrite("$this->_db.$collname", $bulk);
    }

    /**
     * 删除数据
     */
    public function del($collname, array $filter, array $writeOps = [])
    {
        $bulk = new BulkWrite;
        $bulk->delete($filter, $writeOps);
        $this->_conn->executeBulkWrite("$this->_db.$collname", $bulk);
    }

    /**
     * 更新数据
     */
    public function update($collname, array $filter, array $doc, array $writeOps = [])
    {
        $bulk = new BulkWrite;
        $bulk->update($filter, $doc, $writeOps);
        $this->_conn->executeBulkWrite("$this->_db.$collname", $bulk);
    }

    /**
     * 查询
     */
    public function select($collname, array $filter, array $writeOps = [])
    {
        $query = new Query($filter, $writeOps);
        $docs = $this->_conn->executeQuery("$this->_db.$collname", $query);
        return $docs;
    }

    /**
     * 获取当前mongoDB Manager
     */
    public function getMongoManager()
    {
        return $this->_conn;
    }

}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件已上传到百度网盘,附件中是下载地址。真正免积分免费完整版,绝不出现仅下载到部分章节,书中广告页要求QQ联系支付宝购买完整版的流氓行为! 欢迎免积分下载更多本人独有网上难寻觅的 高清IT电子书:http://download.csdn.net/user/sinophp123 人无我有,人有我优,人优我廉!我的版本是全网最清晰的独家制作版本,还不要资源分。 同样一本书,下我的就可以了! 本人上传资料的原则: (1)如果CSDN和网上其他地方已随处可见高清下载,本人不再上传。 (2)如果网上已有我还上传,那么肯定是经重新制作,如不再缺页,清晰度更高,或者加上书签。 (3)每本书都经过逐页纯手工精心处理,包括清晰度的增强,水印的去除。当然最重要的,是尽量保证有书 签方便您浏览。 (4)如果是中译版,文件名前半部分是英文原版书名,后面是中译版书名。 如:“Implementing.Responsive.Design-响应式Web设计实践”。书名经反复校对绝无一字错漏。 (5)每本pdf书默认都是有书签的。来源不限“某星”网站,还有各大网络书店和出版社官网的页码信息。 凡无书签的pdf文件名均含“_no.bookmark”字样,如“HTML5程序开发范例宝典_no.bookmark”。请不要再 浪费时间去寻找书签,肯定没有,网上别人提供的下载版本也绝对不会有(除非您是出版社内部人员!), 没有人会浪费自己时间逐页输入章节页码来费时费力免费给您制作。 (6)只提供中文书籍,您不用担心下载的是英文原版。 (7)只提供完整版,绝不上传只有部分章节的所谓“迷你书”,“试读版”。 (8)书中绝不含广告页和水印LOGO。 Teach.Yourself.NoSQL.with.MongoDB.in.24.Hours-MongoDB入门经典 [美]布拉德·戴利(brad dayley)(著) | 米爱中(译) | 人民邮电出版社 | 9787115391117 | 2015-06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值