时间:2021-07-01 10:21:17 帮助过:30人阅读
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.json
mongoexport.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.json
mongoimport.exe -h 127.0.0.1:27017 -d medicine -c jddj --type csv --headerline --file E:\爬虫项目\csv\jddj.csv
#日志分割
use admin
db.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())
mongodb 常用操作
标签:ps1 项目 sum cti result log 而不是 pre code