我正在使用pymongo客户端查询项目的新闻文章的MongoDB数据库。数据库中的通用文档如下:
doc = {'_id': ObjectId('...')
'headline': 'This is a news headline'
'body': 'This is the news body'
'source': 'GenericNewsPaperName'
'keywords': ['global-news', 'us-politics']
...
}
在我的python代码中,我必须查询数据库,并最终向其中添加新文章。但是,我想避免文章标题重复。 假定标题相同的两篇文章相同,我想检查它们是否具有相同的关键字,如果没有,请在数据库中已经存在的文档中附加新关键字。
假设我要添加一篇文章doc
。在我的代码中,我尝试以下操作:
#Check if there is any document with same headline
if collection.count_documents({'headline': article['headline']} == 0:
collection.insert_one(doc)
#If present, ammend the keywords.
else:
collection.update_one({'headline': doc['headline']},
{'$addToSet': {
'keywords':{'$each':doc['keywords']}
}
})
$addToSet
保证我们采用两个关键字数组的并集,并避免重复输入。
但是,由于某些我不了解的原因,当我运行代码时,即使数据库中存在带有标题的文档,查询collection.count_documents({'headline': article['headline']}
也会返回0(我通过打印进行了检查标题和从终端查询)。有人知道这种行为的原因吗?进行此查询的正确方法是什么?
该问题的一种可能的解决方案是使用collection.create_index
来使'headline'成为索引,以便当我尝试添加两个具有相同标题的文章时pymongo会引发一个异常DuplicateKeyError
处理。但我想了解如何在不将“标题”设置为索引的情况下获得相同的结果。