MongoDBWindow$$Linux配置安装
以下为Windows在D:\MongoDB安装为例
Mongodb在Windows上的安装
首先,我们到Mongodb的官方网站http://www.mongodb.org/downloads下载,下载的版本目前是1.8.1,下载后,解压到文件夹,比如d:\mongodb-win32-1.8.1。接下来,我们可以观察下,该文件夹下有如下文件:
可以看到,mongodb可谓十分简单,只有10个文件。
接下来,我们学习下,如何将mongodb安装成windows中的服务,首先我们在d:\mongoDB下,可以通过—help选项,查看相关的帮助指令,如下:
??C:\MongoDB\bin>mongod?--help?WindowsServiceControlManageroptions:??--install????????????????installmongodbservice??--remove??????????????removemongodbservice??--reinstall????????????reinstallmongodbservice(equivilantofmongod?????????????????????????????--removefollowedbymongod--install)??--serviceNamearg??????????windowsservicename??--serviceDisplayNameargwindowsservicedisplayname??--serviceDescriptionarg????windowsservicedescription??--serviceUserarg??????????????usernameserviceexecutesas??--servicePasswordarg??????passwordusedtoauthenticateserviceUser
?可以看到,--install和—remove两个参数正是我们需要的。因此,将mongodb安装成windows服务的命令如下:
??mongod--dbpath"d:\MongoDB\data"--logpath"d:\MongoDB\logs\mongolog.log"--install--serviceName"MongoDB"
?上面的命令行中,用—dbpath参数指出了数据库的目录,--logpath则指出了日志存放的目录,而—serviceName参数则指出了,命名安装的服务名为MongoDB,运行后有如下提示:
all?outputgoing?to:d:\mongodb\logs\mongolog.logCreatingserviceMongoDB.Servicecreationsuccessful.Servicecanbestarted?from?thecommandlinevia?''netstart"MongoDB"''.
?并且可以在windows的控制面板中的服务中,看到该服务。而卸载服务的命令也很简单,如下:
mongod?--remove--serviceName"MongoDB"
配置用户信息:
进入MongoDB\bin下进入shell脚本
useadmin
db.addUser(‘dbuser’,''navi-tek2OO9'')
db.system.users.find()
db.auth(‘dbuser’,''navi-tek2OO9'')
添加数据库
useyq
db.Yq.insert({‘key’:’value’})
showcollections
db.createCollection(‘storybase’)
一.超级用户相关:
1.#进入数据库admin
useadmin
2.#增加或修改用户密码
db.addUser(''name'',''pwd'')
3.#查看用户列表
db.system.users.find()
4.#用户认证
db.auth(''name'',''pwd'')
5.#删除用户
db.removeUser(''name'')
6.#查看所有用户
showusers
7.#查看所有数据库
showdbs
8.#查看所有的collection
showcollections
9.#查看各collection的状态
db.printCollectionStats()
10.#查看主从复制状态
db.printReplicationInfo()
11.#修复数据库
db.repairDatabase()
12.#设置记录profiling,0=off1=slow2=all
db.setProfilingLevel(1)
13.#查看profiling
showprofile
14.#拷贝数据库
db.copyDatabase(''mail_addr'',''mail_addr_tmp'')
15.#删除collection
db.mail_addr.drop()
16.#删除当前的数据库
db.dropDatabase()
二.增删改
1.#存储嵌套的对象
db.foo.save({''name'':''ysz'',''address'':{''city'':''beijing'',''post'':100096},''phone'':[138,139]})
2.#存储数组对象
db.user_addr.save({''Uid'':''yushunzhi@sohu.com'',''Al'':[''test-1@sohu.com'',''test-2@sohu.com'']})
3.#根据query条件修改,如果不存在则插入,允许修改多条记录
db.foo.update({''yy'':5},{''$set'':{''xx'':2}},upsert=true,multi=true)
4.#删除yy=5的记录
db.foo.remove({''yy'':5})
5.#删除所有的记录
db.foo.remove()
三.索引
1.#增加索引:1(ascending),-1(descending)
2.db.foo.ensureIndex({firstname:1,lastname:1},{unique:true});
3.#索引子对象
4.db.user_addr.ensureIndex({''Al.Em'':1})
5.#查看索引信息
6.db.foo.getIndexes()
7.db.foo.getIndexKeys()
8.#根据索引名删除索引
9.db.user_addr.dropIndex(''Al.Em_1'')
四.查询
1.#查找所有
2.db.foo.find()
3.#查找一条记录
4.db.foo.findOne()
5.#根据条件检索10条记录
6.db.foo.find({''msg'':''Hello1''}).limit(10)
7.#sort排序
8.db.deliver_status.find({''From'':''ixigua@sina.com''}).sort({''Dt'',-1})
9.db.deliver_status.find().sort({''Ct'':-1}).limit(1)
10.#count操作
11.db.user_addr.count()
12.#distinct操作,查询指定列,去重复
13.db.foo.distinct(''msg'')
14.#”>=”操作
15.db.foo.find({"timestamp":{"$gte":2}})
16.#子对象的查找
17.db.foo.find({''address.city'':''beijing''})
五.管理
1.#查看collection数据的大小
2.db.deliver_status.dataSize()
3.#查看colleciont状态
4.db.deliver_status.stats()
5.#查询
6.db.deliver_status.totalIndexSize()
六.advancedqueries:高级查询
条件操作符
$gt:>
$lt:<
$gte:>=
$lte:<=
$ne:!=、<>
$in:in
$nin:notin
$all:all
$not:反匹配(1.3.3及以上版本)
查询name<>"bruce"andage>=18的数据
db.users.find({name:{$ne:"bruce"},age:{$gte:18}});
查询creation_date>''2010-01-01''andcreation_date<=''2010-12-31''的数据
db.users.find({creation_date:{$gt:newDate(2010,0,1),$lte:newDate(2010,11,31)});
查询agein(20,22,24,26)的数据
db.users.find({age:{$in:[20,22,24,26]}});
查询age取模10等于0的数据
db.users.find(''this.age%10==0'');
或者
db.users.find({age:{$mod:[10,0]}});
匹配所有
db.users.find({favorite_number:{$all:[6,8]}});
可以查询出{name:''David'',age:26,favorite_number:[6,8,9]}
可以不查询出{name:''David'',age:26,favorite_number:[6,7,9]}
查询不匹配name=B带头的记录
db.users.find({name:{$not:/^B./}});
查询age取模10不等于0的数据
db.users.find({age:{$not:{$mod:[10,0]}}});
#返回部分字段
选择返回age和_id字段(_id字段总是会被返回)
db.users.find({},{age:1});
db.users.find({},{age:3});
db.users.find({},{age:true});
db.users.find({name:"bruce"},{age:1});
0为false,非0为true
选择返回age、address和_id字段
db.users.find({name:"bruce"},{age:1,address:1});
排除返回age、address和_id字段
db.users.find({},{age:0,address:false});
db.users.find({name:"bruce"},{age:0,address:false});
数组元素个数判断
对于{name:''David'',age:26,favorite_number:[6,7,9]}记录
匹配db.users.find({favorite_number:{$size:3}});
不匹配db.users.find({favorite_number:{$size:2}});
$exists判断字段是否存在
查询所有存在name字段的记录
db.users.find({name:{$exists:true}});
查询所有不存在phone字段的记录
db.users.find({phone:{$exists:false}});
$type判断字段类型
查询所有name字段是字符类型的
db.users.find({name:{$type:2}});
查询所有age字段是整型的
db.users.find({age:{$type:16}});
对于字符字段,可以使用正则表达式
查询以字母b或者B带头的所有记录
db.users.find({name:/^b./i});
$elemMatch(1.3.1及以上版本)
为数组的字段中匹配其中某个元素
Javascript查询和$where查询
查询age>18的记录,以下查询都一样
db.users.find({age:{$gt:18}});
db.users.find({$where:"this.age>18"});
db.users.find("this.age>18");
f=function(){returnthis.age>18}db.users.find(f);
排序sort()
以年龄升序asc
db.users.find().sort({age:1});
以年龄降序desc
db.users.find().sort({age:-1});
限制返回记录数量limit()
返回5条记录
db.users.find().limit(5);
返回3条记录并打印信息
db.users.find().limit(3).forEach(function(user){print(''myageis''+user.age)});
结果
myageis18
myageis19
myageis20
限制返回记录的开始点skip()
从第3条记录开始,返回5条记录(limit3,5)
db.users.find().skip(3).limit(5);
查询记录条数count()
db.users.find().count();
db.users.find({age:18}).count();
以下返回的不是5,而是user表中所有的记录数量
db.users.find().skip(10).limit(5).count();
如果要返回限制之后的记录数量,要使用count(true)或者count(非0)
db.users.find().skip(10).limit(5).count(true);
分组group()
假设test表只有以下一条数据
{domain:"www.mongodb.org"
,invoked_at:{d:"2009-11-03",t:"17:14:05"}
,response_time:0.05
,http_action:"GET/display/DOCS/Aggregation"
}
使用group统计test表11月份的数据count:count()、total_time:sum(response_time)、avg_time:total_time/count;
db.test.group(
{cond:{"invoked_at.d":{$gt:"2009-11",$lt:"2009-12"}}
,key:{http_action:true}
,initial:{count:0,total_time:0}
,reduce:function(doc,out){out.count++;out.total_time+=doc.response_time}
,finalize:function(out){out.avg_time=out.total_time/out.count}
});
[
{
"http_action":"GET/display/DOCS/Aggregation",
"count":1,
"total_time":0.05,
"avg_time":0.05
}
]
|
|