私はmongoDBコレクションに5百万以上のレコードを持っています。それから重複したエントリを削除する必要があります。ここで私が試したコードは、ある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}})
しかし、私はallowDiskuseそのせずに小さなデータセット内のコードを実行すると、私は
Traceback (most recent call last): File "delete_duplicate.py", line 12, in 'allowDiskUse': 'true' TypeError: aggregate() takes exactly 2 arguments (3 given)
、のようなエラーを取得しています。このコードを実行しようとすると、重複したエントリを削除しても問題ありません。しかし、大規模なデータを設定しようとすると、allowdiskuseを使用する必要があるようなエラーが発生します。上記のerorを使用しています.MongoDB 3.0バージョンを使用しています。したがって、この問題を解決するために誰かが私を助けてください私のplatform.soでensureIndexは動作しません。
'{allowDiskUse:true}'を試してください。引用符なし –
Pythonドライバでは、すべてのオプションがキーワード引数として渡されます。したがって、 'allowDiskUse = True'を実行する必要があります。また、これは複製を削除する最善の方法ではありません。バルク操作を使用する別のアプローチが本当に必要です。私の[回答を参照してください](http://stackoverflow.com/a/34738547/3100115) – styvane
私もこれらの方法を試してみましたが、それは無効な構文のようなエラーをtrowinngだ – shilpa