Python 如果找到字符串/模式,则将其从列表中删除
我有一个JSON文件,我正在使用Python 如果找到字符串/模式,则将其从列表中删除,python,pymongo,Python,Pymongo,我有一个JSON文件,我正在使用PyMongo从MongoDB数据库检索它 我通过执行以下操作将Python游标转换为列表: db = mongo_client.test_db table = db.test_table doc = list(table.find()) 现在我要做的是检查列表是否包含一个特定的字符串,如果它包含,它应该只保留该字符串的一个子字符串 列表: doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features':
PyMongo
从MongoDB数据库检索它
我通过执行以下操作将Python游标转换为列表:
db = mongo_client.test_db
table = db.test_table
doc = list(table.find())
现在我要做的是检查列表是否包含一个特定的字符串,如果它包含,它应该只保留该字符串的一个子字符串
列表:
doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': [DBRef('featId', ObjectId('5f452e3793d7b757bcbd2d88'))]}]
doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': ObjectId('5f452e3793d7b757bcbd2d88')}]
因此,目前我正在使用下面的代码检查列表中是否存在正常工作的DBRef
。
但是为了只保留ObjectId
,我不太确定用什么替换print语句
if "DBRef" in str(doc):
print("its here") #remove the dbref and only keep alphanumeric value
else:
print("not here") #do nothing to the list
预期输出(如果在列表中找到DBRef):
doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': [DBRef('featId', ObjectId('5f452e3793d7b757bcbd2d88'))]}]
doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': ObjectId('5f452e3793d7b757bcbd2d88')}]
据我所知,列表中有一个字典,因此可以只更新其中的一些值 不确定您希望doc变量的输出是什么,列表中有多少dict等等,但是,下面是我想到的:
#regex version in case saving ObjectId as bson.objectid is not required
import re
object_value = re.search("DBRef\('featId', ObjectId\((.*?)\)", str(doc[0]['features'])).group(1)
d1 = {'features': f'ObjectId({object_value})'}
doc[0].update(d1)
备选案文2:
#accessing the required value directly and saving it as ObjectId
from bson.objectid import ObjectId
from bson.dbref import DBRef
object_value_no_regex = doc[0]['features'][0].id
d1 = {'features': ObjectId(object_value_no_regex)}
doc[0].update(d1)
谢谢