一、查询重复数据
# 方法一
db.集合名称.aggregate(
{'$group':{
'_id': {'查询重复字段名': '$查询重复字段名'},
'uniqueIds': {'$addToSet': '$_id'},
'count' : {'$sum': 1}
}},
{'$match': {
'count': {'$gt': 1}
}}
)
# 方法二
db.集合名称.aggregate(
{"$group" : { "_id": "$查询重复字段名", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$project": {"查询重复字段名" : "$_id", "_id" : 0} }
)
二、删除重复数据
db.表名.aggregate([
{
$group: { _id: {字段1: '$字段1', 字段2: '$字段2'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
],{
allowDiskUse: true
}).forEach(function(doc){
doc.dups.shift();
db.表名.remove({_id: {$in: doc.dups}});
})
解析:
1.首先用aggregate将重复字段取出。根据字段1,字段2分组并统计数量,addToSet在返回结果数组中增加_id字段
2.使用gt:greater than
3.doc.dups.shift();表示从数组第一个值开始删除;作用是踢除重复数据其中一个_id,让后面的删除语句不会删除所有数据
4.使用forEach循环根据_id删除数据
Tips:
1.数据量大的时候需要添加allowDiskUse: true,否则会报错。
2.addToSet返回,不会修改数组。
三、给所有数据增加字段
db.表.update(
// query
{
//"key" : "value"
},
// update
{
$set:{"字段名":""}
},
// options
{
"multi" : true, // update only one document
"upsert" : false // insert a new document, if no existing document match the query
}
);
四、更新某个字段
db.user_info_test.update( {"uid":"6727341136"}, {$set:{"follow":['sdsd','dsdsd']}})
set的话会直接将新的记录覆盖原有的记录,而不是在原有记录上做修改。
五、将mongodb的集合导出为csv
1、dos中进入mongodb的bin目录
2、mongoexport -d 数据库名 -c 集合名 --type=csv --fields 要导出的字段 -o 导出路径
注意:
1、字段和字段之间用逗号分隔开就可以,不能额外添加空格。
2、此处我将字段用双引号括起来了,实际上此处也可以不用括号括起来,但是如果字段名本身含有空格的话,则必须用括号括起来。
3、导出的csv中文很可能出现乱码,解决方法:用记事本打开-->另存为-->编码类型选择ANSI-->确定即可。
---持续更新ing---