我想避免添加重复数据,只需1)更新一个字段(视图数量)或2)网站中已更改的所有字段。为此,我使用的是我在网站上找到的ID(origin_id)。
管道
class MongoDBPipeline(object):
def __init__(self):
connection = pymongo.MongoClient(
settings['MONGODB_SERVER'],
settings['MONGODB_PORT']
)
db = connection[settings['MONGODB_DB']]
self.collection = db[settings['MONGODB_COLLECTION']]
def process_item(self, item, spider):
valid = True
for data in item:
if not data:
valid = False
raise DropItem("Missing {0}!".format(data))
if valid:
# Update item if it is in the database and insert otherwise.
self.collection.update({'origin_id': item['origin_id']}, dict(item), upsert=True)
return item
MongoDB记录
{
"_id" : ObjectId("59725e919a1a6b7f0350027a"),
"origin_id" : "12256699",
"views":"556",
"url":"...",
"title":"...",
}
如果您想了解更多详情,请与我们联系......
答案 0 :(得分:0)
如果文档中存在views
,则需要1
字段增加origin_id
字段。
请注意您只能设置其他字段,因为它们包含非数字值。
为了跳过额外的查询以检查集合中是否存在origin_id
的文档,这也是必要的。
self.collection.update({
'origin_id': item['origin_id']},
{
'$set': {'url': item['url'], 'title': item['title']},
'$inc': {'views': 1}
}
},
upsert=True)