FreddeMacBook-Air:software fred$ cd mongodb
FreddeMacBook-Air:mongodb fred$ ls
GNU-AGPL-3.0 THIRD-PARTY-NOTICES data
README bin
FreddeMacBook-Air:mongodb fred$ bin/mongod --dbpath=./data
> show dbs;
admin (empty)
local 0.078GB
test 0.453GB
> use aa
switched to db aa
> show dbs;
admin (empty)
local 0.078GB
test 0.453GB
> aa.c1.insert({name:'admin',password:'password1'});
2014-12-28T22:32:53.749+0800 ReferenceError: aa is not defined
> use aa
switched to db aa
> db.c1.insert({name:'admin',password:'password1'});
WriteResult({ "nInserted" : 1 })
> show dbs;
aa 0.078GB
admin (empty)
local 0.078GB
test 0.453GB
> show collections
c1
system.indexes
>
MongoDB的基本操作
MongoDB的启动
进入mongodb安装文件的根目录,运行
mongod --dbpath=
,dbpath=
是指定数据库的位置。其使用如下所示:至此,数据库启动成功。 在windows下对于--dbpath后接的路径最好加上引号,如:
当然也可以在启动的时候指定日志的输出,代码如下:
让mongodb在后台运行,加上
-fork
参数其实和Mysql有些类似,Mysql启动的时候也是先运行
mysqld
启动数据库,然后再运行mysql
命令进行数据库的相关操作。Mongo数据库也是一样,运行mongod
启动数据库后,接着再开一个命令行窗口,运行mongo
命令来执行数据库的相关操作。退出mongo输入
exit
或者直接Ctrl + C
数据库的基本操作
默认情况下,登录到mongodb中,自动连接到test数据库,如下:
采用
show dbs
查看当前有多少个数据库,use db_name(如:amin)
是切换数据库,show collections
是查看当前数据库下有多少个collection
. mongo中的collection类似于关系型数据库中的表。数据库和Collection的创建
在MongoDB中,数据库和Collection都是隐式创建的。无需手动创建,要使用时自动创建。如下:
最初我的数据库中只有
admin
,local
,test
三个数据库,但是当我执行了切换到数据库aa
,并执行db.c1.insert({name:'admin',password:'password1'}
后,再执行show dbs
发现aa
数据库已经创建好了,如果用show collections
会发现collectionc1
也创建了。MongoDB的数据类型
MongoDB支持string, integer, boolean, double ,null, array object等基本数据类型,还有data, object id, binary data, regular expression, code
插入
采用
insert
方法,插入的内容是json串,如下:insert
方法,若主键相同,则插入不成功,也可用save
方法,save
方法是主键相同则修改,不同则插入。如果不指定_id
,mongodb会自动为我们生成一个。更新
采用
update
方法,使用如下:常见的操作示例:
db.c1.update({name:"user3"}, {$set:{name:"user300"}});
将 name值为user3改为user300.注意:默认情况下,只会更新第一个符合条件的记录。若想更新行:db.c5.update({name:"user1",{$set:{name:"user111"}},0 ,1)
说明:
删除
删除采用
remove
方法。db.c3.remove({})
db.c3.remove({name: "user1"})
查询
db.c1.find()
和db.c1.find({})
效果是一样的.db.c1.find({name:"user5"})
;db.c1.find({name:"user5", {name:1})
,在默认情况下,会返回_id
这一列,如果不想返回这一列,可以写成db.c1.find({name:"user5", {name:1, _id: 0})
查找时的条件限制。如
db.c1.find().count()
db.c1.sort({age:1})
按age的升序排列,db.c1.sort({age:-1})
按age的降序排列。db.c1.find().limit(4)
从0开始输出4个。db.c1.find().skip(5).limit(5)
跳过前5个,再取5个,相当于mysql中的SELECT * FROM USER LIMIT 5,5
.db.c1.find().sort({age:-1}).skip(2).limit(5).count(1)
;注意当查询语句中有skip, limit时,默认情况下,count会忽略这些条件,因此此处必须要设置count(1)
,否则前面的条件会没有利用上。disctinct
,db.c1.distinct("name")
查询不同的name.查询:
索引
MongoDB中会对_id字段默认建立了索引。
ensureIndex
,db.c1.ensureIndex({name:1});
db.c1.ensureIndex({personal_id:1},{unique:true})
db.c1.getIndexKeys()
或db.c1.getIndexes()
db.c1.find({name:"user1"}).explain()
db.c1.dropIndex({age:1})
db.c1.dropIndexes()
删除所有的索引,但id的索引除外,id索引是不能删除的,但存在于system表中。固定集合
MongoDB中有着固定大小的集合(普通集合是没有大小限制的,随着数据的增多会不断的增大),以LRU(Least Recently Used最近最少使用)规则和插入顺序进行age-out(老化移除)处理,自动维护集合中对象的插入顺序,在创建是要预指定大小,如果空间用完,新添加的对象将会取代集合中最旧的对象,永远保持最新的数据。
固定集合需要显式的创建使用·
createCollection
执行以上代码,会发现user1这条记录已经被移掉了。
将普通集合转为固定集合:
db.runCommand({convertTocapped:"c1",size:1000,max:3});
性能优化
db.c1.find({name:"user1"}).explain()
用户的管理
mongo中是有一个超级管理员,还有某个数据库的管理员两种。超级管理员要放到admin表中。 在mongo中要添加 --auth 增加安全性,用户授权。
添加用户用
addUser
,为用户授权采用auth
。对于addUser
,如果用户名相同,则相当于是修改密码的操作。对于某个database添加用户,可以采用
PHP 操作MongoDB
连接mongodb (conn.php)
查询 (find.php)
详细 (user.php)
插入(insert.php)
更新(update.php)
删除(delete.php)