3

我注意到 pymongo 库的一个奇怪行为。当我从单元测试中运行以下代码时,一切正常(2 个文档存储在它们的集合中,并设置了 _id)。

property_db_item = {#"_id": str(bson.ObjectId()),"url": item['url'],
                            "price": item['price'],"rooms": item['rooms'],
                            "area": item['area'],"flor": item['flor'],
                            "street": item['street'],"city": item['city'],
                            "region": item['region'],"country": item['country'],
                            "photoUrls": item['photoUrls'],"updatedAt": str(date)}

        db.properties.update({"url": item['url']}, property_db_item, upsert=True)
        db.property_trends.update(
            {"url": item['url'], "date": date.strftime("%Y-%m")},
            {
                "$setOnInsert": {"url": item['url'], #"_id": str(bson.ObjectId())],
                                 "date": date.strftime("%Y-%m")},
                "$addToSet": {"prices": {date.strftime("%Y-%m-%d"): item['price']}}

            }, upsert=True)`

但是当我从终端执行它时(scrapy crawl myParser),并得到这个错误:

DuplicateKeyError(details["err"]) pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: local.properties.$ id dup key: { : null }

4

1 回答 1

3

这是一个现有的错误local对数据库的 UpsertsE11000 duplicate key error index: local.properties.$_id_ dup key: { : null }异常失败。

这是一个例子:

> use local
switched to db local
> db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true)
> db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true)
E11000 duplicate key error index: local.properties.$_id_  dup key: { : null }
> use local2
switched to db local2
> db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true)
> db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true)
于 2013-05-17T07:09:57.077 回答