MongoDB小技能
MongoDB导入导出
数据导出
MongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
命令:
mongoexport -d dbname -c collectionname -o file --type json/csv -f field参数说明:
-d :数据库名
-c :collection名
-o :输出的文件名
–type : 输出的格式,默认为json
-f :输出的字段,如果-type为csv,则需要加上-f “字段名”
数据导入
命令:
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field参数说明:
-d :数据库名
-c :collection名
–type :导入的格式默认json
-f :导入的字段名
–headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
–file :要导入的文件
MongoDB备份与恢复
备份
命令:
mongodump -h dbhost -d dbname -o dbdirectory参数说明:
-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例,例如:test
-o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放 该数据库实例的备份数据。
恢复
命令:
mongorestore -h dbhost -d dbname --dir dbdirectory参数或名:
-h: MongoDB所在服务器地址
-d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
–dir: 备份数据所在位置,例如:/home/mongodump/itcast/
–drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
注:以上命令的执行目录为Mongodb安装路径下的bin文件夹下
MongoDB建索引
命令:
1 | { |
1表示升序索引,-1表示降序索引
如果是多字段联合索引,就相当于在字典里添加元素:
1 | { |
另外以Robo 3T为例,建索引时还有唯一索引(unique)、删除重复(Drop duplicates)的可选项。
如果在创建索引时,库里已有存量数据,如果勾选唯一索引,库里该索引字段存在重复的值,是无法成功建立索引的,除非同时勾选删除重复数据选项,或者不建立唯一索引。
MongoDB查询命令
MongoDB 查询集合中有重复值的字段,并显示重复次数
例如有以下集合companies:
1 | { |
想知道有哪些”enter_name”字段具有重复值,也就说同一个公司名称在companies集合中存在多条数据,使用以下命令:1
2
3
4db.getCollection('companies').aggregate([
{$group: {_id: '$enter_name', count: {$sum : 1}}},
{$match: {count: {$gt : 1}}}
])
输出形式:
1 | /* 1 */ |
表示以上公司名称在companies集合中存在多条数据,具体条数均为2条。
MongoDB查询集合中某字段所有不同值以及总共的条数
命令为:
db.collectionName.distinct("字段名")
注:db.getCollection(collection_name).distinct("字段名")也是可以的
等价于sql语句:
select distinct 字段名 from collectionName
如果想直接查询不同值总共的条数:
db.collectionName.distinct("字段名").length
以上面的集合companies为例,查询”enter_name”字段所有不同值的记录总条数
db.companies.distinct("enter_name").length
MongoDB排序
命令为:
db.getCollection(collection_name).find({}).sort({key: 1})
key表示指定的排序字段,1表示升序排序,-1表示降序排序。
MongoDB查询指定时间范围的数据
mongodb里比较,用 “$gt” 、”$gte”、 “$lt”、 “$lte”(分别对应”>”、 “>=” 、”<” 、”<=”),组合起来可以进行范围的查找。
1 | db.CollectionAAA.find({ "CreateTime" : { "$gte" : ISODate("2017-04-20T00:00:00Z") |
前提是CreateTime字段是ISODate类型。