1、mongodb数据表相关
# 显示数据库
show dbs
# 数据库
use ceshi
# 显示表
show tables
# 创建集合
db.createCollection('infoB') # 复制数据 db.item_infoA.copyTo('infoB')
# 使用命令导入json 格式的数据
mongoimport -d database_name -c collection_name inpath/file_name.json
# 使用命令导出json 格式的数据
mongoexport -d database_name -c collection_name -o outputpath/file_name.json
2、常用的update与find函数以及日期相关
from string import punctuation
for i in item_info.find().limit(50):
print(i['province'])
for i in item_info.find():
if i['province']:
province= [i for i in i['province'] if i not in punctuation]
else:
province= ['不明']
# 下面update函数使用了两个参数,第一个标识要更新哪些数据,第二个标识怎样修改
# '_id':i['_id'],key:value一一对应,通过这种方式表示要更新每一项
sales.update({'_id':i['_id']},{'$set':{'province':province}})
# find函数,两个参数,分别包含在{}中,第一个标识要找的条件,是一些键值对,第二个标识需要显示的字段,0不显示,1标识显示
# slice分片
for i in item_info.find({'pub_date':{'$in':['2016.01.12','2016.01.14']}},{'area':{'$slice':1},'_id':0,'price':0,'title':0}).limit(300):
print(i)
from datetime import date
from datetime import timedelta
#日期
a = date(2017,1,12)
print(a)
# 2017-01-12
d = timedelta(days=1)
print(d)
# 1 day, 0:00:00
def get_all_dates(date1,date2):
the_date = date(int(date1.split('.')[0]),int(date1.split('.')[1]),int(date1.split('.')[2]))
end_date = date(int(date2.split('.')[0]),int(date2.split('.')[1]),int(date2.split('.')[2]))
days = timedelta(days=1)
while the_date <= end_date:
yield (the_date.strftime('%Y.%m.%d'))
the_date = the_date + days
for i in get_all_dates('2017.01.02','2017.01.12'):
print(i)
3、相关数据格式
西红柿 蔬菜 山东 2.8 新 1500 kg 2017-1-11
卷心菜 蔬菜 河北 1.5 鲜 1000 kg 2017-1-9
玉米 粮食 辽宁 0.8 新 1580 kg 2016-11-25
大豆 粮食 山东 1.1 新 1000 kg 2017-1-8
卷心菜 蔬菜 河北 1.5 鲜 2705 kg 2017-1-9
玉米 粮食 辽宁 0.8 新 1669 kg 2016-11-25
大米 粮食 浙江 0.7 新 2115 kg 2016-11-28
大米 粮食 江苏 0.8 新 2151 kg 2016-11-15
西瓜 水果 山东 0.5 鲜 1518 kg 2016-10-1
山楂 水果 山东 2.5 鲜 1116 kg 2016-9-1
茄子 蔬菜 江苏 1.1 鲜 1500 kg 2016-9-15
小麦 粮食 河北 1.2 新 1695 kg 2016-9-1
葡萄 水果 山东 2.1 鲜 1719 kg 2016-9-17
4 、按照产品分类计算销售额
import charts
def data_gen(cates):
pipeline = [
{'$match':{'$and':[
{'category':{'$in':cates}},
{'province':{'$nin':['江苏']}}
]}},
{'$group':{'_id':'$category','sum_sales':{'$sum':{ '$multiply':['$price','$quantity'] }}}},
{'$sort':{'sum_sales':1}}
]
for i in salesnew.aggregate(pipeline):
data = {
'name': i['_id'],
'data': [i['sum_sales']],
'type': 'column'
}
yield data
for i in data_gen(['水果','蔬菜','粮食']):
print(i)
series = [i for i in data_gen(['水果','蔬菜','粮食'])]
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '销售金额'},
'subtitle': {'text': '图表'},
'yAxis' : {'title': {'text': '金额'}}
}
charts.plot(series,options=options,show='inline')
结果:
值得注意的一点,在管道中不好进行数据类型的转换,所以最好存入mongodb中的数据是正确的数据类型。
关于数据类型的转换参考文章 how to convert string to numerical values in mongodb 地址:http://stackoverflow.com/questions/29487351/how-to-convert-string-to-numerical-values-in-mongodb
#代码: db.my_collection.find({moop : {$exists : true}}).forEach( function(obj) { obj.moop = new NumberInt( obj.moop ); db.my_collection.save(obj); } );
5、计算每个月的销售数量
def data_gen(cates):
pipeline = [
{ '$project' : { 'quantity': 1,'province': 1,'saledate': 1,'category':1,'ymstring' : { '$concat': [ {'$arrayElemAt': [ {'$split': ['$saledate', '-']}, 0 ]},'-', {'$arrayElemAt': [ {'$split': ['$saledate', '-']}, 1 ]}] }}},
{'$match