MongoDB常用命令

一、在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目录下,输入以下命令:

  1. 导入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)

原文地址:https://www.cnblogs.com/djlbolgs/p/12532023.html