如何从mongodb数据库中删除重复记录

时间:2016-05-09 09:25:40

标签: mongodb python-2.7 pymongo aggregation-framework

我有一个拥有超过500万条记录的mongoDB集合。从那我需要删除重复的条目。这是我试过的代码,

        from pymongo import MongoClient
        conn=MongoClient("mongodb://127.0.0.1:27017")
        db=conn.test

        cursor=db.coll.aggregate(
            [
                {"$group": {"_id":{"Instrument Name":"$Instrument Name","High":"$High","Low":"$Low","V":"$V","Date":"$Date","Close":"$Close","Open":"$Open"}, "unique_ids": {"$addToSet": "$_id"}, "count": {"$sum": 1}}}

            ],
            {
                'allowDiskUse': 'true'
            }

        )


        response = []
        for doc in cursor:
            del doc["unique_ids"][0]
            for id in doc["unique_ids"]:
                response.append(id)

        db.coll.remove({"_id": {"$in": response}})

但是当我尝试执行此代码时,我收到的错误如

  

追踪(最近一次通话):        文件" delete_duplicate.py",第12行,in         ' allowDiskUse':' true'         TypeError:aggregate()只需要2个参数(给定3个)

当我在一个没有allowDiskuse的小数据集中运行代码时,它成功地删除了重复的条目。但是当我在大数据集中尝试时,它会抛出一个错误,就像我需要使用allowdiskuse一样,如果我也使用它也是geeting我上面提到的eror。我正在使用MongoDB 3.0版本。所以ensureIndex将无法在我的平台上运行。所以请任何人帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_TOAST,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

然后致电

cursor = [{
    "$group": {
        "_id": {
            "Instrument Name": "$Instrument Name",
            "High": "$High",
            "Low": "$Low",
            "V": "$V",
            "Date": "$Date",
            "Close": "$Close",
            "Open": "$Open"
        },
        "unique_ids": {
            "$addToSet": "$_id"
        },
        "count": {
            "$sum": 1
        }
    }
}]

答案 1 :(得分:0)

您还可以将ensure_index()用于数据库中您想要的某个唯一列,这将删除您从数据库中提到的列的所有重复条目,然后您将剩下的是不同的条目,因此,对于任何查询,您将从脚本执行操作不会在结果中提供重复记录。