我有一个拥有超过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将无法在我的平台上运行。所以请任何人帮我解决这个问题。
答案 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()
用于数据库中您想要的某个唯一列,这将删除您从数据库中提到的列的所有重复条目,然后您将剩下的是不同的条目,因此,对于任何查询,您将从脚本执行操作不会在结果中提供重复记录。