一、在mongo.exe中的命令:
mongodb4.2版本,bin目录下,双击mongo.exe,在”>”的命令提示下,我们可以输入一些命令:
> show dbs #查看有哪些db
> use local #切换到local数据库
> show collections #查看当前所有集合
> show tables #与show collections一样
> db.startup_log.find() #查看具体数据
> db.createCollection(‘log’) #创建’log’数据集
二、导出数据,用mongoexport.exe
在cmd中,进入到bin目录下,输入以下命令:
注意:命令中不要尖括号,没有引号,形如:
mongoexport -d local -c startup_log -o startup.json
1、导出为json格式:
mongoexport –d <数据库名称> -c <Collection名称> -o <json文件名称>
2、导出为csv格式(可选字段,多个字段名称之间用逗号隔开):
mongoexport –d <数据库名称> -c <Collection名称> --type=csv -f <字段名称> -o <csv文件名称>
3、不选字段的直接导出,例:
mongoexport -d test -c sheet -o C:UsersloriDesktop est.csv
三、导入数据,用mongoimport.exe
在cmd中,进入到bin目录下,输入以下命令:
- 导入json文件:
mongoimport –d <数据库名称> -c <Collection名称> --file <json文件名称>
2.导入csv文件:
mongoimport –d <数据库名称> -c <Collection名称> --type=csv --headerline --file <csv文件名称>
实际样例:
mongoimport -d local -c djllog --type=csv --headerline --file startup_log.csv
四、把collection拷贝到新建collection:
mongodb4.2版本,bin目录下,双击mongo.exe,在”>”的命令提示下,输入:
db.sheet.find().forEach(function(x){db.sheet2.insert(x);}) #把sheet的数据拷贝到sheet2中
完整操作过程如下:
> show dbs
admin 0.000GB
config 0.000GB
ganji 0.013GB
local 0.000GB
test 0.000GB
xiaozhu 0.000GB
> use test
switched to db test
> show tables
sheet
> show collections
sheet
> db.createCollection('sheet2') #创建'sheet2'表
{ "ok" : 1 }
> show tables
sheet
sheet2
> db.sheet.copyTo('sheet2') # db.collection.copyTo()在mongodb4.2后已经不支持了
2020-03-23T09:54:49.117+0800 E QUERY [js] uncaught exception: TypeError: db.sheet.copyTo is not a function :
@(shell):1:1
> db.sheet.find().forEach(function(x){db.sheet2.insert(x);}) #用这句来copy
五、更新数据
在pycharm中,代码操作:
#sheet2.update({'name':'name0'},{'$set':{'age':10086}}) # 单条数据更新
i = 1000
for item in sheet2.find(): #多条数据更新
i += 1
new_age = i
new_name = 'name'+str(i)
sheet2.update({'_id':item['_id']},{'$set':{'age':new_age,'name':new_name}})
六、aggregate(pipeline)
根据需要筛选并统计数据,使用方法:
db.collections.aggregate(pipeline)
pipeline = [
{$match: ?},
{$group: ?},
{$sort: ?},
{$limit: ?},
{$skip: ?},
{$unwind: ?},
{$redact: ?},
{$sample: ?},
{$out: ?}
]
例子1
pipeline = [
#筛选出'pub_date':'2015.12.24' 且 'time':3的文件(数据记录条目)
{ '$match': { '$and': [ 'pub_date': '2015.12.24'}, {'time': 3} ] } },
#以‘price’字段分组; {'$sum':1},每次计数1个
{ '$group': { '_id': '$price', 'count': {'$sum': 1} } },
{ '$sort': { 'counts': 1 } }, # -1 表示逆序,从大到小;1表示正序
{ '$limit': 3 } #限制最多3个结果
]
例子2
pipeline2 = [
{'$match':{'time':1}}, # 过滤数据,只选1天成交的商品
#{'$match':{'time':{'$in':[1,2,3,4,5]}}}, # 过滤数据,选出5天内成交的商品
{'$group':{'_id':{'$slice':['$area',0,1]},'counts':{'$sum':1}}}, #整个这句是分组;'$slice'是将某字段分片,['$area',0,1]将area字段分片,跳过第0片,取1片,即取第一片;{'$sum':1},每次计数1个
{'$sort':{'counts':-1}}
]
例子3
pipeline3 = [
{'$match':{'$and':[{'pub_date':{'$gte':'2015.12.25','$lte':'2015.12.27'}},{'area':{'$all':['朝阳']}}]}}, # 日期在2015.12.25到2015.12.27之间的,area字段有朝阳的
{'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}}, # cates字段分片,取第3片
{'$limit':3} #限制只出3个结果
]
例子4
pipeline4 = [
{'$match':{'$and':[{'pub_date':{'$gte':'2015.12.25','$lte':'2015.12.27'}},
{'cates':{'$all':['北京二手手机']}}, #分类中有'北京二手手机'的
{'look':{'$nin':['-']}} #look字段不为'-'的数据,look是几成新
]}},
{'$group':{'_id':'$look','avg_price':{'$avg':'$price'}}}, #以look字段分组(按成色分组),计算price的平均值
{'$sort':{'avg_price':-1}}
]
例子5
pipeline = [
#整个这句是分组;'$slice'是将某字段分片,['$area',0,1]将area字段分片,跳过第0片,取1片,即取第一片;{'$sum':1},每次计数1个
{'$group':{'_id':{'$slice':['$area',0,1]},'counts':{'$sum':1}}},
{'$sort' :{'counts':-1}}, #按降序排列
{'$limit':30} #限制最多30个结果
]
for item in goods_info.aggregate(pipeline):
print(item)