实现ensureIndex()以使用pymongo删除重复的文档

时间:2014-05-01 06:34:22

标签: python mongodb pymongo

我需要根据字段“X”的唯一值删除重复的条目。它在mongodb shell中运行良好:

db.collection.ensureIndex({x' : 1},{unique: true, dropDups: true})

我想使用pymongo运行它,我使用的代码如下:

import pymongo
import mmh3

conn = pymongo.MongoClient()
db = conn['scrapy-mongodb']

db.collection.ensure_index({'x' : 1}, {'$unique' : True, '$dropDups' : True})

此代码抛出:

  

TypeError:如果未指定方向,则key_or_list必须为a   列表实例

我哪里出错了?

1 个答案:

答案 0 :(得分:7)

你在几个方面的pymongo调用语法错误了。这应该起作用,假设“collection”是集合的名称。

db.collection.ensure_index([("x" , pymongo.ASCENDING), ("unique" , True), ("dropDups" , True)])

Pymongo(和Python)需要一个关键方向对列表而不是Dict,因为Dicts是无序的。升序索引的语法也是pymongo.ASCENDING。最后,unique和dropDups不需要“$”。