很全的 Mongodb数据库学习文档 与 php操作mongodb.docx
《很全的 Mongodb数据库学习文档 与 php操作mongodb.docx》由会员分享,可在线阅读,更多相关《很全的 Mongodb数据库学习文档 与 php操作mongodb.docx(23页珍藏版)》请在冰豆网上搜索。
很全的Mongodb数据库学习文档与php操作mongodb
Mongodb数据库学习文档
一.Mongodb的基本概念
1.Mongodb数据库的命名规则:
不能是空字符串(“”)
不得含有‘’(空格)、.、$、/、\、和\0(空字符)
应全部小写
最多64字节
2.Mongodb数据库的安装和启动
在windows上安装与启动:
第一步.先下载适用windows的最新mongodb版本的稳定产品。
第二步.把压缩文件解压到自己指定的文件夹(或D:
\),为了方便,将解压后的文件夹重命名为mongodb,然后在D盘根文件夹下建一个mongo文件夹。
第三步.启动mongodb服务器,执行如下操作
打开命令提示符窗口(启动>运行>,输入cmd并按确定),
C:
\DocumentsandSettings\Administrator>d:
(指向D盘)
D:
\>cdmongod(指向D盘下的mongodb文件夹)
D:
\mongodb>cdbin(指向mongodb文件夹下的bin文件夹)
D:
\mongodb\bin>mongod-dbpathd:
//mongo(指定数据库的存放文件夹)
然后出现:
WedOct1909:
38:
16MongoDBstarting:
pid=1064port=27017dbpath=d:
//mongo32-b
it
**NOTE:
whenusingMongoDB32bit,youarelimitedtoabout2gigabytesofdata
**seehttp:
//blog.mongodb.org/post/137788967/32-bit-limitations
WedOct1909:
38:
16dbversionv1.6.5,pdfileversion4.5
WedOct1909:
38:
16gitversion:
0eb017e9b2828155a67c5612183337b89e12e291
WedOct1909:
38:
16sysinfo:
windows(5,1,2600,2,'ServicePack3')BOOST_LI
B_VERSION=1_35
WedOct1909:
38:
16[initandlisten]waitingforconnectionsonport27017
WedOct1909:
38:
16[websvr]webadmininterfacelisteningonport28017
WedOct1909:
39:
45[initandlisten]connectionacceptedfrom127.0.0.1:
6819#1
至此Mongodb服务器启动成功。
(注:
启动mongodb服务器以后,切不可关闭dos窗口,否则服务器会自动关闭)
第四步.启动shell。
重新打开一个dos窗口,输入
C:
\DocumentsandSettings\Administrator>d:
D:
\>cdmongodb
D:
\mongodb>cdbin
D:
\mongodb\bin>mongo
另一种方法是,在Windows资源管理器中导航至C:
\mongo\bin并双击mongo.exe。
无论选择哪种方法来启动shell都会出现
MongoDBshellversion:
1.6.5
connectingto:
test
>
现在已经连接到测试服务器。
2.MongoDB在Linux下的安装配置
1.对于32位的linux
$curlhttp:
//downloads.mongodb.org/linux/mongodb-linux-i686-1.4.4.tgz>mongo.tgz
$tarxzfmongo.tgz
对于64位的linux
$curlhttp:
//downloads.mongodb.org/linux/mongodb-linux-x86_64-1.4.4.tgz>mongo.tgz
$tarxzfmongo.tgz如果没有安装curl先安装apt-getinstallcurl
2.创建数据文件夹默认情况下,MongoDB会在/data/db/这个文件夹存放数据,这个文件夹需要自己手动创建。
通过如下方式创建:
$addusermongodb$passwdmongodb$sudomkdir-p/data/db/$sudochown`id-u`/data/db$chown-Rmongodb:
mongodb/data当然可以通过--dbpath命令指定MongoDB将数据存储到另外的目录中去。
3.让数据库运行起来在控制台中:
$nohup./mongodb-xxxxxxx/bin/mongod&$./mongodb-xxxxxxx/bin/mongo>db.foo.save({a:
1})>db.foo.find()结果是:
{"_id":
ObjectId("4cd181a31415ffb41a094f43"),"a":
1}OK!
!
二.Mongodb指令及相关操作
a)show命令
ii.在dos中输入showdb查看当前所有的数据库
>showdbs
admin
alphabet
color
colors
local
mymongo
test
>
iii.showcollections查看当前数据库下所有的表
>usemymongo
switchedtodbmymongo
>showcollections
colors
shell.colors
system.indexes
>
b)use命令
i.指定当前所需要使用的数据库,如果没有,新建一个库。
如果这个库没有数据,则系统在一段时间后将销毁
ii.use[databaseName]
c)insert指令
i.添加数据,数据形式为json格式
ii.如果insert添加的数据中没有表,则会新建一张表并且在将数据添加入表中
iii.db.[表名].insert()
>db.dingdan.insert(
...{
...order_id:
109384,
...order_date:
newDate("12/04/2010"),
...customer:
{
...name:
"JoeBloggs",
...company:
"XYZInc.",
...phone:
"(555)123-4567"
...},
...payment:
{
...type:
"Cash",
...amount:
4075.99,
...paid_in_full:
true
...},
...items:
[
...{
...sku:
"ABC1200",
...description:
"Asampleproduct",
...quantity:
1,
...price_per_unit:
75.99,
...},{
...sku:
"XYZ3400",
...description:
"Anexpensiveproduct",
...quantity:
2,
...price_per_unit:
2000
...}
...],
...cashier_id:
340582242
...}
...)
>
d)save指令
i.保存数据
ii.如果表中无此数据则将数据添加入表中
iii.如果表中存在此数据,则将新的数据修改
iv.db.[表名].save()
db.collection.save(x)
x就是要更新的对象,只能是单条记录。
如果在collection内已经存在一个和x对象相同的"_id"的记录。
mongodb就会把x对象替换collection内已经存在的记录,否则将会插入x对象,如果x内没有_id,系统会自动生成一个再插入。
相当于上面update语句的upsert=true,multi=false的情况。
db.test0.save({count:
40,test1:
"OK"});_id系统会生成
db.test0.save({_id:
40,count:
40,test1:
"OK"});如果test0内有_id等于40的,会替换,否则插入。
e)remove指令
i.删除表中所指定的一条数据
ii.db.[表名].remove()
在colors表中添加一条记录
>db.colors.save({"color":
"112233"})
>db.colors.find()
{"_id":
ObjectId("4e9bc2024fadb58af17b2f01"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2374fadb58af17b2f02"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2384fadb58af17b2f03"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2394fadb58af17b2f04"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2394fadb58af17b2f05"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23a4fadb58af17b2f06"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23a4fadb58af17b2f07"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23b4fadb58af17b2f08"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23b4fadb58af17b2f09"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23c4fadb58af17b2f0a"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23c4fadb58af17b2f0b"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23d4fadb58af17b2f0c"),"color":
"ff0000"}
{"_id":
ObjectId("4e9e3f435240000000005a2d"),"color":
"112233"}
删除添加的那条记录
>db.colors.remove({"color":
"112233"})
>db.colors.find()
{"_id":
ObjectId("4e9bc2024fadb58af17b2f01"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2374fadb58af17b2f02"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2384fadb58af17b2f03"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2394fadb58af17b2f04"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc2394fadb58af17b2f05"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23a4fadb58af17b2f06"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23a4fadb58af17b2f07"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23b4fadb58af17b2f08"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23b4fadb58af17b2f09"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23c4fadb58af17b2f0a"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23c4fadb58af17b2f0b"),"color":
"ff0000"}
{"_id":
ObjectId("4e9bc23d4fadb58af17b2f0c"),"color":
"ff0000"}
f)update指令
i.修改数据
ii.db.[表名].update()
db.collection.update(criteria,objNew,upsert,multi)
criteria:
update的查询条件,类似sqlupdate查询内where后面的
objNew:
update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sqlupdate查询内set后面的
upsert:
这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi:
mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
例:
db.test0.update({"count":
{$gt:
1}},{$set:
{"test2":
"OK"}});只更新了第一条记录
db.test0.update({"count":
{$gt:
3}},{$set:
{"test2":
"OK"}},false,true);全更新了
db.test0.update({"count":
{$gt:
4}},{$set:
{"test5":
"OK"}},true,false);只加进去了第一条
db.test0.update({"count":
{$gt:
5}},{$set:
{"test5":
"OK"}},true,true);全加进去了
db.test0.update({"count":
{$gt:
15}},{$inc:
{"count":
1}},false,true);全更新了
db.test0.update({"count":
{$gt:
10}},{$inc:
{"count":
1}},false,false);只更新了第一条
g)find指令
i.查询数据,可配合skip与limit方法使用达到分页效果。
ii.db.[表名].find({}).skip([num1]).limit([num2]),num1从第几条数据开始,num2为所查询的数据条数,如果数据不足,则以所剩数据为准
iii.db.[表名].find({[_id:
{<:
num}]})中括号中为查询条件示例,大于小于等关系运算符则使用转译字符代替。
>usezm
switchedtodbzm
>db.zm.find().skip(10).limit(5);
{"_id":
ObjectId("4e9e3d6b5240000000005a1c"),"char":
"k","code":
107}
{"_id":
ObjectId("4e9e3d6b5240000000005a1d"),"char":
"l","code":
108}
{"_id":
ObjectId("4e9e3d6b5240000000005a1e"),"char":
"m","code":
109}
{"_id":
ObjectId("4e9e3d6b5240000000005a1f"),"char":
"n","code":
110}
{"_id":
ObjectId("4e9e3d6b5240000000005a20"),"char":
"o","code":
111}
>
h)findOne指令
i.查询指定查询中的第一条指令
ii.db.[表名].findOne()
>db.zm.findOne()
{"_id":
ObjectId("4e9e3d6b5240000000005a12"),"char":
"a","code":
97}
注:
findOne中的O必须大写。
i)function
i.自定义函数,定义完后可直接调用
ii.functiontestFunction(op1,op2,op3……){}
iii.“testFunction”:
function(op1,op2,op3……){}
iv.定义好的函数可以直接调用,可以使用return返回数据
>functiontestFunction(){
...db.zm.remove({"code":
{$in:
[100,101,102,103]}})
...returndb.zm.find({})
...}
>testFunction()
{"_id":
ObjectId("4e9e3d6b5240000000005a12"),"char":
"a","code":
97}
{"_id":
ObjectId("4e9e3d6b5240000000005a13"),"char":
"b","code":
98}
{"_id":
ObjectId("4e9e3d6b5240000000005a14"),"char":
"c","code":
99}
{"_id":
ObjectId("4e9e3d6b5240000000005a19"),"char":
"h","code":
104}
{"_id":
ObjectId("4e9e3d6b5240000000005a1a"),"char":
"i","code":
105}
{"_id":
ObjectId("4e9e3d6b5240000000005a1b"),"char":
"j","code":
106}
{"_id":
ObjectId("4e9e3d6b5240000000005a1c"),"char":
"k","code":
107}
{"_id":
ObjectId("4e9e3d6b5240000000005a1d"),"char":
"l","code":
108}
{"_id":
ObjectId("4e9e3d6b5240000000005a1e"),"char":
"m","code":
109}
{"_id":
ObjectId("4e9e3d6b5240000000005a1f"),"char":
"n","code":
110}
{"_id":
ObjectId("4e9e3d6b5240000000005a20"),"char":
"o","code":
111}
{"_id":
ObjectId("4e9e3d6b5240000000005a21"),"char":
"p","code":
112}
{"_id":
ObjectId("4e9e3d6b5240000000005a22"),"char":
"q","code":
113}
{"_id":
ObjectId("4e9e3d6b5240000000005a23"),"char":
"r","code":
114}
{"_id":
ObjectId("4e9e3d6b5240000000005a24"),"char":
"s","code":
115}
{"_id":
ObjectId("4e9e3d6b5240000000005a25"),"char":
"t","code":
116}
{"_id":
ObjectId("4e9e3d6b5240000000005a26"),"char":
"u","code":
117}
{"_id":
ObjectId("4e9e3d6b5240000000005a27"),"char":
"v","code":
118}
{"_id":
ObjectId("4e9e3d6b5240000000005a28"),"char":
"w","code":
119}
{"_id":
ObjectId("4e9e3d6b5240000000005a29"),"char":
"x","code":
120}
hasmore
j)var
i.变量命名类型
ii.同JS中的var一样。
1.var[name]命名也与js变量命名规则一致。
k)print指令
i.用于打印
ii.print([Strings]);
iii.如果打印对象为mongo数据,则会无法识别。
l)printJson指令
i.用于对数据进行打印
ii.printJson([json]);
m)shutdown
i.停止mongodb
ii.>use数据库名
switchedtodoadmin
>db.shutdownServer();
servershouldbedown…
MongoDB支持各种条件运算符,包括:
∙$lt(小于)
∙$lte(小于等于)
∙$gt(大于)
∙$gte(大于等于)
∙$all(匹配数组中的所有值)
∙$exists(检查字段是否存在)
∙$mod(模数)
∙$ne(不等)
∙$in(匹配数组一个或多个值)
∙$nin(匹配数组中的零值)
∙$or(匹配一个或另一个查询)
∙$nor(不匹配查询)
∙$size(匹配具有预定数量元素的任何数组)
∙$type(匹配具有指定BSON数据类型的值)
∙$not(不等于)
db.表名.find({字段名:
{$gt:
100}})
mongodb的更新操作符