MongoDb、Mongodb php扩展 安装步骤及相关知识

来源:互联网 发布:东方神起 知乎 编辑:程序博客网 时间:2024/05/06 15:55

(一)安装mongo

http://jingyan.baidu.com/article/fd8044faf4f3a95030137a79.html

1.如遇到如下问题

32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.

可以执行./mongod --nojournal或./mongod --auth -dbpath /usr/local/mongodb/data/db --repair命令就ok了

2.将mongo加入环境变量

执行命令PATH=$PATH:/usr/local/mongodb/bin

3.加入开机启动

1.vi /etc/rc.local

然后加入mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork

若需客户端登陆mongo时验证身份  需加入--auth,如:

mongod --auth--dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork

重启mongodb进程:service mongodb restart/停止mongod进程:service mongodb stop

(启动mongodb进程:mongod --auth --dbpath=/var/lib/mongodb --logpath=/var/log/mongodb/mongodb.log --logappend  --port=27017 --fork --journal)

添加用户和验证用户

db.addUser("test", "123");
db.auth('test','123');

(二)php mongo扩展安装

1.https://pecl.php.net/package/mongo 官网下载扩展

2.tar zxvf mongo-1.6.9.tgz

3.cd mongo-1.6.9/

4./usr/bin/phpize(如果没有phpize 则执行命令apt-get install php5-dev安装)phpize 命令是用来准备 PHP 扩展库的编译环境的

5../configure --with-php-config=/usr/bin/php-config

6.make && make install 执行完后会出现如下图所示


7.可以执行下make test命令看看

8.找到php.ini 将extension_dir = "/usr/lib/php5/20121212+lfs/",再添加extension = "mongo.so" 

9.重启php: service php5-fpm restart


ok!大功告成!


(三)相关知识

1.文档、集合、数据库的命名规范

文档的键是字符串。除了少数例外情况,键可以使用任意 UTF-8 字符。
• 键不能含有 \0(空字符) 。这个字符用于表示键的结尾。
• . 和 $ 具有特殊意义,只能在特定环境下使用(后面的章节会详细说明) 。通常,
这两个字符是被保留的;如果使用不当的话,驱动程序会有提示。MongoDB 的文档不能有重复的键。


集合使用名称进行标识。集合名可以是满足下列条件的任意 UTF-8 字符串。
• 集合名不能是空字符串("") 。
• 集合名不能包含 \0 字符(空字符) ,这个字符表示集合名的结束。
• 集合名不能以“system.”开头,这是为系统集合保留的前缀。例如,system.users
这个集合保存着数据库的用户信息,而 system.namespaces 集合保存着所有数据库集合的信息。
• 用户创建的集合不能在集合名中包含保留字符 '$' 。因为某些系统生成的集合中包含 $ ,很多驱动程序确实支持在集合名里包含该字符。除非你要访问这种系统
创建的集合,否则不应该在集合名中包含 $ 。 db.blog 代表 blog 集合, 而 db.blog.posts 代表 blog.posts 集合。


数据库通过名称来标识,这点与集合类似。数据库名可以是满足以下条件的任意
UTF-8 字符串。
• 不能是空字符串("") 。
• 不得含有 /、\、.、"、 * 、<、>、:、|、?、$(一个空格) 、\0(空字符) 。基本上,只能使用 ASCII 中的字母和数字。
• 数据库名区分大小写, 即便是在不区分大小写的文件系统中也是如此。简单起见,数据库名应全部小写。
• 数据库名最多为 64 字节。
要记住一点,数据库最终会变成文件系统里的文件,而数据库名就是相应的文件名,这是数据库名有如此多限制的原因。

2.db.test.insert({"_id" : 0,"count":1});

更新count值+2:db.test.update({"_id" : 0},{"$inc" : {"count" : 2}});

设置count值为1:db.test.update({"_id" : 0},{"$set" : {"count" : 1}});

撤销count键:db.test.update({"_id" : 0},{"$unset" : {"count" : 1}});

如果数组已经存在,"$push"会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组:

db.test.update({"_id" : 0},{"$push" : {"comments" :{"name" : "bob", "email" : "bob_01@example.com","content" : "good post."}}});
使用"$each"子操作符,可以通过一次"$push"操作添加多个值:
db.test.update({"_id" : 0},{"$push" : {"hourly" : {"$each" : [562.776, 562.790, 559.123]}}});

3.将文档插入到MongoDB中时,依次插入的文档在磁盘上的位置是相邻的。因此,如果一个文档变大了,原先的位置就放不下这个文档了,这个文档就会被移动到集合中的另一个位置。如果一个文档因为体积变大而不得不进行移动,它原先占用的空间就闲置了,而且填充因子会增加。之后插入的新文档都会拥有填充因子指定大小的增长空间。如果在之后的插入中不再发生文档移动,填充因子会逐渐变小。
4.要是使用 upsert,既可以避免竞态问题,又可以缩减代码量( update 的第 3 个参数表示这是个upsert):
db.analytics.update({"url" : "/blog"}, {"$inc" : {"pageviews" : 1}}, true)这行代码和之前的代码作用完全一样,但它更高效,并且是原子性的!创建新文档
会将条件文档作为基础,然后对它应用修改器文档。












0 0