回到目录
当我们从MongoDB网站下载安装包之后,它会伴随有一系列的工具,服务器程序mongod是我们耳熟能详的了,客户端mongo和性能检测mongostat我们可能就没有用过了,今天主要是介绍一下mongo这个客户端命令行工具的使用。
测试环境:服务端:linux版的mongod 2.6.9
客户端:window版的mongo 2.6.9
下面介绍一些常用的命令
1 建立一个新的链接
var x=new Mongo("192.168.2.4:27017")
2 显示所有数据库
show dbs
3 指定当前要使用的数据库
var db=x.getDB("background")
4 得到当前数据库的名称
db.getName()
5 得到数据库的所有集合
db.getCollectionNames()
6 得到数据库中集合的详细信息
db.getCollectionInfos()
7 得到指定的集合
db.getCollection("background")
8 得到集合中元素的数量
db.getCollection("background").count()
9 得到服务器相关信息
db.hostInfo()
10 得到当前Mongo服务器的连接信息
db.getMongo()
11 为排序和查询的字段添加索引
了解数据库的朋友对索引应该不会陌生吧,当数据量比较小时,它起不到什么作用,当数据量大时500W以上,你的字段就需要加索引了,性能提升相当的明显,如果你不加,那你就等着昙花开吧,呵呵!
db.TableName.ensureIndex({FieldName:1})//1为升序,-1为降序
db.TableName.getIndexes()
12 删除索引
db.TableName.dropIndex({"LoginName":1})
13 查看数据表的状态,同步显示分片的状态和每个片被命中的数量
db.WebManageUsers.stats()
14 查看数据库的状态,它会把相关分片的信息显示出来
db.stats()
15 在路由服务器查询分片完整的信息
var db=x.getDB("admin");
db.runCommand({listshards:1});//需要在admin数据库下
16 设置数据库的分片状态,让它生效
#指定databaseName分片生效
db.runCommand( { enablesharding :"databaseName"});
17 设置数据库下的数据表(Collection)分片状态,让它生效
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "databaseName.tableName",key : {_id: 1} } )
18 对数据表进行分组
db.tableName.aggregate([{ "$group" : { "_id" : "$DepartmentID", "userCount" : { "$sum" : 1 } } }])
19 分组第二种方法group强大命令
db.M_Partner_Footprints.group({
key: function (doc) { PartnerInfoID: true },//分组的key
cond: { PartnerInfoID: 6, Login: { ClientType: 0 } },//条件过滤
initial: { "count": 0 },
reduce: function (doc, out) {//聚合方式
out.count += 1;
},
finalize: function (out) {//结果处理
return out;
}
});
20 group对多个字段进行分组,使用keyf函数来实现
db.M_User_Footprints.group({
keyf: function (doc) { return { UserInfoID: doc.UserInfoID, TeacherID: doc.TeacherID } },
cond: { UserInfoID: 6, Type: 6 },
initial: { "count": 0 },
reduce: function (doc, out) {
out.count += 1;
},
finalize: function (out) {
return out;
}
});
22 使用aggregate进行聚合操作
db.M_User_Footprints.aggregate([{ $group: { _id: "$UserInfoID", num_tutorial: { $sum: 1 } } }])
23 管道,MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
一 $project选择指定的列,_id被默认选中
db.M_User_Footprints.aggregate(
{
$project: {
UserInfoID: 1,
TeacherID: 1,
}
}
);
二 $match选择某个范围的数据,并将结果传到下一个管道中
db.M_User_Footprints.aggregate([
{ $match: { UserInfoID: { $gt: 1, $lte: 100 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
]);
各位对索引一定要引起重视,因为在大数据情况下,如果没有索引,在进行排序,查询等操作时就引发全表扫描,那代价是非常大的!
作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980
支付宝扫一扫,为大叔打赏!
