MongoDB


转至元数据结尾
转至元数据起始

命令交互

连接MongoDB:

mongo 192.168.168.225:10000/logs

目前Mongo下的数据库有:

  • logs,目前存放用户行为日志
  • form,病历夹表单数据
  • platform,商业平台的相关数据

MongoDB常用命令:

> db.auth('logs','password')   #填写账号密码,用密码取代“password”
> show dbs   #查看所有的db
> use logs   #连接到一个指定的数据库logs
> show collections   #查看所有的集合
> db.getCollection('logs').find({})   #查看logs集合下的所有数据
> db.getCollection('logs').find({"log.CUSTOM_DATA.userId": 500566})    #查看userid=500566的用户日志

简单查询

查询一条记录

db.data.findOne();

查询一共有多少记录

db.data.find().count();

查询按照时间倒序前10条

db.data.find({'date':{$gte:new Date(2015,9,1)}}).sort({'date':-1}).limit(10);

distinct
db.runCommand({ 'distinct' : 'data' , 'key' : 'log.appName' })

查询objectID

db.data.find({  "_id"  : ObjectId( "55938c9cf26adcbd53f61afb" ) });

复杂查询

聚合查询

聚合查询类似于关系数据库中的group by,是将数据按照指定维度汇总。例如:

db.data.aggregate(
{$match: { "date" :{$gt:new  Date (2015,6,29)}}},
{$ group : { "_id" "$log.page" , "count" :{$ sum :1}}},
{$sort:{ "count" :-1}},
{$limit:10}
)
管道
 group by date()
db.data.aggregate(
{$match:{ 'date' :{$gt:new  Date (2015,9,8)}}},
{$ group :{ '_id' :{ 'year' :{$ year : '$date' }, 'month' :{$ month : '$date' }, 'day' :{$dayOfMonth: '$date' }}, 'count' :{$ sum :1}}},
{$sort:{ '_id' :-1}},
{$limit:10}
);

group data()+distinct

db.data.aggregate({$match:{$ and :[{ 'date' :{$gte:new  Date (2015,9,8)}},{ 'date' :{$lt:new  Date (2015,9,12)}}], 'log.page' : 'MainTabActivity' , 'log.env' : 'release' }},
{$ group :{ '_id' :{ 'month' :{$ month : '$date' }, 'day' :{$dayOfMonth: '$date' }, 'userId' : '$log.uid' }}},
{$ group :{ '_id' :{ 'month' : '$_id.month' , 'day' : '$_id.day' }, 'userId' :{$ sum :1}}},
{$sort:{ '_id' :-1}},
{$limit:10});
排除字段为空的情况
db.data.aggregate(
{$match:{ 'date' :{$gte:new  Date (2015,9,7)},
'log.url' :/http:\/\/ static .xingshulin.com\/zhenliaoquan\/main.html\?groupUID=a09f864b-6fc7-4884-8f15-a8a1982c085c/,
'log.userId' :{$exists: true }}},
{$ group :{ '_id' :{ 'day' :{$dayOfMonth: '$date' }, 'userId' : '$log.userId' }}},
{$ group :{ '_id' : '$_id.day' , 'userNum' :{$ sum :1}, 'userList' :{$push: '$_id.userId' }}},
{$sort:{ '_id' :-1}}
};

 

Mongo查询指定userid的访问日志:

db.getCollection( 'data' ).find({ "date" :{$gt: new  Date( 2015 , 9 , 30 )}, "log.userId" : 827020 ).sort({ "date" :- 1 })

查询指定群组ID,不含IOS系统,倒排序:

db.getCollection( 'data' ).find({ "date" :{$gt: new  Date( 2015 , 9 , 30 )}, "log.systemName" :{$ne: "IOS" },
     "log.url" :/quan.xingshulin.com\/group\/a09f864b-6fc7- 4884 -8f15-a8a1982c085c/}
     ).sort({ "date" :- 1 })

数据更新

db.collection.update( criteria, objNew, upsert, multi )

  • criteria : update的查询条件,类似sql update查询内where后面的
  • objNew   : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert   : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi    : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
db.getCollection( 'custom_buddies' ). update ({ 'project_id' : 'e243b5ff-683f-4ddb-844d-f2d2b86455f2' } , { $ set  : {  'enterprise'  '杏树林诊疗圈运营' } }, false , true  );

典型查询

诊疗圈加载时间查询
db.data.aggregate({$match:{$ and :[{ 'date' :{$gte:new  Date (2015,9,1)}},{ 'date' :{$lt:new  Date (2015,11,3)}}],
'log.url' :/.xingshulin.com/,   
'log.startTimestamp' :{$exists: true }}},
{$project:{ 'date' :1, 'stay_time' :{ '$subtract' :[ '$log.timestamp' , '$log.startTimestamp' ]}}},
{$ group :{ '_id' :{ 'year' :{$ year : '$date' }, 'month' :{$ month : '$date' }, 'day' :{$dayOfMonth: '$date' }}, 'avg' :{$ avg : '$stay_time' }, 'count' :{$ sum :1}}},
{$sort:{ '_id' :-1}},
{$limit:10}
);
  • count:从病历夹APP进入诊疗圈首页的次数
  • avg:每日平均加载时间,单位毫秒

数据类型

data数据定义

s:操作时间的秒值。

m:操作时间的分钟值。

h:操作时间的小时值。

logType:值为‘appStart’,则为启动app。值为‘search’,则结果每半秒都会产生一个结果。

timestamp:为当前操作时间。

referer:上一个链接页面。

env: release为上线的情况。

常用链接

Python与MongoDB

Python链接MongoDB,一般是用pymongo包,简要教程见此

需要注意的是:A Note On Unicode Strings中提到的问题,Python取出MongoDB的数据是字典格式,并且对字典的key和value都会编码为unicode,需要解码使用。

类似于:

for  (k,v)  in  records.items():
     if  type (k) = = unicode :
         k = k.encode( 'utf8' )
     if  type (v) = = unicode :
         v = v.encode( 'utf8' )

MongoDB的主键类型是bson.objectid.ObjectId,可以通过 str(record["_id"]) 来转为字符串

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值