mongodb 常用操作

#备份


mongodump.exe -h 127.0.0.1:27017 -d medicine -c jddj -o C:\MongoDB\Server\4.2\backup

#恢复


mongorestore.exe -h 127.0.0.1:27017 -d medicine -c jddj C:\MongoDB\Server\4.2\backup\medicine\jddj.bson

#导出json、csv数据

mongoexport.exe -h 127.0.0.1:27017 -d medicine -c jddj -o E:\爬虫项目\json\jddj.jsonmongoexport.exe -h 127.0.0.1:27017 -d medicine -c jddj --type=csv -f 字段1,字段2,字段3 -o E:\爬虫项目\csv\jddj.csv

#导入json、csv数据

mongoexport.exe -h 127.0.0.1:27017 -d medicine -c jddj E:\爬虫项目\json\jddj.jsonmongoimport.exe -h 127.0.0.1:27017 -d medicine -c jddj --type csv --headerline --file E:\爬虫项目\csv\jddj.csv

#日志分割

use admindb.runCommand({logRotate:1})

#去重
#按照 名称、规格 聚合查询去重

db.jddj.aggregate( [ //{$match:{type:1,action:3}}, //可以加条件给这里 匹配type=1 action=3 可选 { //根据 名称、规格 分组,$group只会返回参与分组的字段,使用$addToSet在返回结果数组中增加_id字段) $group: { _id: {名称: ‘$名称‘,规格: ‘$规格‘}, count: { $sum: 1 }, dups: { $addToSet: ‘$_id‘ } } }, { $match: { count: { //(匹配数量大于1的数据 $gt: 1 } } } ], {allowDiskUse: true}).forEach( //(使用forEach循环根据_id删除数据) function( doc ){ doc.dups.shift(); db.jddj.remove( { _id: { $in: doc.dups } } ); })

#模糊查询(查找key为“名称”,value包含“小儿热速清颗粒”的数据)

db.jddj.find({"名称":{$regex:"小儿热速清颗粒"}})db.test_info.find({"name": {$regex: ‘测试‘, $options:‘i‘}}) i 忽略大小写,{<field>:{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。 m 多行匹配模式,{<field>:{$regex/pattern/,$options:‘m‘}},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。 x 忽略非转义的空白字符,{<field>:{$regex:/pattern/,$options:‘m‘}},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。 s 单行匹配模式{<field>:{$regex:/pattern/,$options:‘s‘}},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。使用$regex操作符时,需要注意下面几个问题: i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}} 在设置索引的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/}#查询重复db.getCollection(‘jddj‘).aggregate([ { $group: { _id : ‘$名称‘, count: { $sum : 1 } } }, { $match: { count: { $gt : 1} } }])

#查询存在、不存在某字段的数据

db.getCollection(‘jddj‘).find({"category1Id":{"$exists":true}})db.getCollection(‘jddj‘).find({"category1Id":{"$exists":false}})db.jddj.aggregate([{$match: {"category1Id":{"$exists":true}} },])db.jddj.aggregate([{$match: {"category1Id":{"$exists":false}} },])

#聚合查询(多次match,并删除查询结果)

db.jddj.aggregate([{$match: {"名称":{$regex:"小儿热速清颗粒"}} },{$match: {规格:{$exists:false}} },{$group: {_id:null, dups: {$addToSet:‘$_id‘} } }], {allowDiskUse: true}).forEach( function( doc ){ db.jddj.remove( { _id: { $in: doc.dups } } ); })

#根据重复的 名称,去除不包含 规格 的数据

db.getCollection(‘jddj‘).aggregate([ { $group: { _id : ‘$名称‘, count: { $sum : 1 } } }, { $match: { count: { $gt : 1} } }, { $group: { _id: null, dups1: {$addToSet:‘$_id‘}} }]).forEach( function( doc1 ){ db.getCollection(‘jddj‘).aggregate([ { $match: { 名称: { $in : doc1.dups1} } }, { $match: { 规格: { $exists: false}} }, { $group:{ _id: null,dups: { $addToSet: ‘$_id‘}} } ]) .forEach( function( doc ){ db.jddj.remove( { _id: { $in: doc.dups } } ); }) })

#Mongodb查询结果插入新建表中

var result = db.原始表名.find({"查询条件"})while(result.hasNext()) db.新建表名.insert(result.next())

相关文章