• 【解决】MongoDB 线上业务处理,数据去重脚本实现


    mongo客户端工具下载  https://robomongo.org/download
     
    线上业务,k线 展示出现问题,相同时间戳的数据多次插入导致数据不真实,后经排查发现是每次都是写的四条数据,找开发配合一起查找问题,发现是后台逻辑处理的问题
     
    需求:将重复的数据去掉,只保留一份数据
     
    客户端数据查询:
     
     
     
      由于表太多 一张一张去删 很麻烦 于是写了个脚本偷懒
     
     1 #!/bin/bash
     2 # liyongjian5179@163.com
     3 #将所有的表名导出来
     4 mongo 192.168.112.128:27017/admin -uadmin -plyj &> 1.txt <<EOF
     5 use user_center;
     6 show collections
     7 exit;
     8 EOF
     9 
    10 sed -i  '1,4d' 1.txt
    11 #tail -n 2 1.txt > 2.txt
    12 for TABLE in `cat 1.txt` ;do
    13     echo ${TABLE}
    14 #查重
    15 mongo 192.168.112.128:27017/admin -uadmin -plyj <<EOF
    16 use user_center
    17 db.${TABLE}.aggregate([{$group:{_id:{createTime:'$createTime'},count:{$sum:1}}},{$match:{count:{$gt:1}}}])
    18 exit
    19 EOF
    20 STATUS=`echo $?`
    21 echo $STATUS
    22 if [ $STATUS = 0 ];then
    23 #去重
    24 mongo 192.168.112.128:27017/admin -uadmin -plyj  <<EOF
    25 use user_center;
    26 db["${TABLE}"].aggregate([{$group: { _id: {createTime: '$createTime'},count: {$sum: 1},dups: {$addToSet: '$_id'}}},{$match: {count: {$gt: 1}}}]).forEach(function(doc){doc.dups.shift(); db["${TABLE}"].remove({_id: {$in: doc.dups}}); });
    27 exit
    28 EOF
    29 TATUS=`echo $?`
    30 echo $STATUS
    31 if [ $STATUS = 0 ];then echo "去重 success" ; else echo "fail" ;fi
    32 
    33 else
    34     echo "wrong"
    35     exit 123
    36 
    37 fi
    38 done
     
    库如下:
    > show dbs
    admin        0.000GB
    local        0.000GB
    test         0.002GB
    user_center  0.111GB
     
    表如下:
    btc_cnyt_12hour_kline
    btc_cnyt_15min_kline
    btc_cnyt_1hour_kline
    btc_cnyt_1min_kline
    btc_cnyt_2hour_kline
    btc_cnyt_30min_kline
    btc_cnyt_3day_kline
    btc_cnyt_3min_kline
    btc_cnyt_4hour_kline
    btc_cnyt_5min_kline
    btc_cnyt_6hour_kline
    btc_cnyt_day_kline
    btc_cnyt_week_kline
    cnytplus_cnyt_12hour_kline
    cnytplus_cnyt_15min_kline
    cnytplus_cnyt_1hour_kline
    cnytplus_cnyt_1min_kline
    cnytplus_cnyt_2hour_kline
    cnytplus_cnyt_30min_kline
    cnytplus_cnyt_3day_kline
    cnytplus_cnyt_3min_kline
    cnytplus_cnyt_4hour_kline
    cnytplus_cnyt_5min_kline
    cnytplus_cnyt_6hour_kline
    cnytplus_cnyt_day_kline
    cnytplus_cnyt_week_kline
    cnytplus_eth_12hour_kline
    cnytplus_eth_15min_kline
    cnytplus_eth_1hour_kline
    cnytplus_eth_1min_kline
    cnytplus_eth_2hour_kline
    cnytplus_eth_30min_kline
    cnytplus_eth_3day_kline
    cnytplus_eth_3min_kline
    cnytplus_eth_4hour_kline
    cnytplus_eth_5min_kline
    cnytplus_eth_6hour_kline
    cnytplus_eth_day_kline
    cnytplus_eth_week_kline
    eos_cnyt_12hour_kline
    eos_cnyt_15min_kline
    eos_cnyt_1hour_kline
    eos_cnyt_1min_kline
    eos_cnyt_2hour_kline
    eos_cnyt_30min_kline
    eos_cnyt_3day_kline
    eos_cnyt_3min_kline
    eos_cnyt_4hour_kline
    eos_cnyt_5min_kline
    eos_cnyt_6hour_kline
    eos_cnyt_day_kline
    eos_cnyt_week_kline
    eth_cnyt_12hour_kline
    eth_cnyt_15min_kline
    eth_cnyt_1hour_kline
    eth_cnyt_1min_kline
    eth_cnyt_2hour_kline
    eth_cnyt_30min_kline
    eth_cnyt_3day_kline
    eth_cnyt_3min_kline
    eth_cnyt_4hour_kline
    eth_cnyt_5min_kline
    eth_cnyt_6hour_kline
    eth_cnyt_day_kline
    eth_cnyt_week_kline
    ltc_cnyt_12hour_kline
    ltc_cnyt_15min_kline
    ltc_cnyt_1hour_kline
    ltc_cnyt_1min_kline
    ltc_cnyt_2hour_kline
    ltc_cnyt_30min_kline
    ltc_cnyt_3day_kline
    ltc_cnyt_3min_kline
    ltc_cnyt_4hour_kline
    ltc_cnyt_5min_kline
    ltc_cnyt_6hour_kline
    ltc_cnyt_day_kline
    ltc_cnyt_week_kline
    usdt_cnyt_12hour_kline
    usdt_cnyt_15min_kline
    usdt_cnyt_1hour_kline
    usdt_cnyt_1min_kline
    usdt_cnyt_2hour_kline
    usdt_cnyt_30min_kline
    usdt_cnyt_3day_kline
    usdt_cnyt_3min_kline
    usdt_cnyt_4hour_kline
    usdt_cnyt_5min_kline
    usdt_cnyt_6hour_kline
    usdt_cnyt_day_kline
    usdt_cnyt_week_kline
     
     
     
     

  • 相关阅读:
    int func(int aa[4]) { return sizeof(aa);}
    C语言中的undefined behavior系列(3) trap representation
    面试被轮及访博客园三人组蹭饭记 20100910
    关于带新人和作新人。
    [C++]Call virtual member function in constructor or destructor
    The using declaration in C++
    WF & WCF(5)
    sqlserver 常用函數
    WF & WCF(4)
    oracle 三種集合類型比較(indexby表,嵌套表,數組)
  • 原文地址:https://www.cnblogs.com/liyongjian5179/p/9885141.html
Copyright © 2020-2023  润新知