(一)安装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"会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组:
4.要是使用 upsert,既可以避免竞态问题,又可以缩减代码量( update 的第 3 个参数表示这是个upsert):
db.analytics.update({"url" : "/blog"}, {"$inc" : {"pageviews" : 1}}, true)这行代码和之前的代码作用完全一样,但它更高效,并且是原子性的!创建新文档
会将条件文档作为基础,然后对它应用修改器文档。