亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1402 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號