记录一下实验过程中mongodb常用的操作语句

2020-03-18  本文已影响0人  不会是绿色的

一、查询重复数据

# 方法一
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分组并统计数量,group只返回要参与分组的字段,使用addToSet在返回结果数组中增加_id字段
2.使用match匹配数量大于1的数据gt:greater than
3.doc.dups.shift();表示从数组第一个值开始删除;作用是踢除重复数据其中一个_id,让后面的删除语句不会删除所有数据
4.使用forEach循环根据_id删除数据

Tips:
1.数据量大的时候需要添加allowDiskUse: true,否则会报错。
2.addToSet 操作符只有在值没有存在于数组中时才会向数组中添加一个值。如果值已经存在于数组中,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修改器用来指定一个键值对,如果存在键就进行修改,不存在则进行添加。不用set的话会直接将新的记录覆盖原有的记录,而不是在原有记录上做修改。

五、将mongodb的集合导出为csv

1、dos中进入mongodb的bin目录
2、mongoexport -d 数据库名 -c 集合名 --type=csv --fields 要导出的字段 -o 导出路径


TIM图片20200322121440.png
注意:

1、字段和字段之间用逗号分隔开就可以,不能额外添加空格。
2、此处我将字段用双引号括起来了,实际上此处也可以不用括号括起来,但是如果字段名本身含有空格的话,则必须用括号括起来。
3、导出的csv中文很可能出现乱码,解决方法:用记事本打开-->另存为-->编码类型选择ANSI-->确定即可。

---持续更新ing---

上一篇 下一篇

猜你喜欢

热点阅读