pymongo:检查具有给定条目的文档

时间:2018-07-03 17:27:20

标签: mongodb mongodb-query pymongo

我正在使用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处理。但我想了解如何在不将“标题”设置为索引的情况下获得相同的结果。

0 个答案:

没有答案