为了账号安全,请及时绑定邮箱和手机立即绑定

Pymongo 的问题:想要向现有数据库添加具有不同值的新字段,但所有条目都是相同的

Pymongo 的问题:想要向现有数据库添加具有不同值的新字段,但所有条目都是相同的

梦里花落0921 2023-08-22 16:32:09
我有一个评论数据库,并想在我的数据库中创建一个新字段,指示评论是否包含与“池”相关的单词。import reimport pandas as pdfrom pymongo import MongoClientclient = MongoClient()db = client.Hotels_Copenhagencollection = db.get_collection("hotel_review_table")data = pd.DataFrame(list(collection.find()))def common_member(a, b):    a_set = set(a)    b_set = set(b)    if a_set & b_set:        return True    else:        return Falsepool_set = {"pool","swim","swimming"}for single_review in data.review_text:    make_it_lowercase = str(single_review).lower()    tokenize_it = re.split("\s|\.|,", make_it_lowercase)    pool_mentioned = common_member(tokenize_it, pool_set)    db.hotel_review_table.update_one({}, {"$set":{"pool_mentioned": pool_mentioned}})在 python 中,我已经统计了包含与“pool”相关的单词的评论数量,结果发现我的评论中有 1k/50k 谈论的是 pool。我通过将 db.hotel_review_table.update_one 行移动到循环中解决了之前发布的在各处获取相同条目的问题。这样主要问题就解决了。然而,像这样更新数据库需要相当长的时间。还有其他方法可以让它更快吗?
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您费了很大的劲才实现了 MongoDB 中开箱即用的功能。您需要使用文本索引。


创建文本索引(在 MongoDB shell 中):


db.hotel_review_table.createIndex( { "single_review": "text" } )

然后你的代码可以简化为:


from pymongo import MongoClient


db = MongoClient()['Hotels_Copenhagen']


for keyword in ['pool', 'swim', 'swimming']:

    db.hotel_review_table.update_many({'single_review': keyword}, {'$set': {'pool_mentioned': True}})

请注意,如果未提及,则不会将该值设置为 false;如果确实需要,您可以编写另一个更新来将任何不为 true 的值设置为 false。


查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 1364 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信