如何通过获取mongodb集合值来调用python函数

Posted

技术标签:

【中文标题】如何通过获取mongodb集合值来调用python函数【英文标题】:how to call python function by getting mongob collection values 【发布时间】:2021-10-18 05:27:25 【问题描述】:

如何在mongodb中创建文档和集合来进行python代码配置。获取mongodb调用的属性名、数据类型、函数?

mongodb 集合示例示例

db.attributes.insertMany([
    attributes_names: "email", attributes_datype: "string", attributes_isNull="false", attributes_std_function = "email_valid" 
    attributes_names: "address", attributes_datype: "string", attributes_isNull="false", attributes_std_function = "address_valid" 

]);

Python 脚本和函数

def email_valid(df):

    df1 = df.withColumn(df.columns[0], regexp_replace(lower(df.columns[0]), "^a-zA-Z0-9@\._\-| ", ""))
    extract_expr = expr(
        "regexp_extract_all(emails, '(\\\w+([\\\.-]?\\\w+)*@\\[A-Za-z\-\.]+([\\\.-]?\\\w+)*(\\\.\\\w2,3)+)', 0)")
    df2 = df1.withColumn(df.columns[0], extract_expr) \
        .select(df.columns[0])

    return df2

如何获取python脚本中所有的mongodb值,并根据属性调用函数。

【问题讨论】:

【参考方案1】:

从 python 脚本创建MongoDB 集合:

import pymongo
# connect to your mongodb client
client = pymongo.MongoClient(connection_url)

# connect to the database
db = client[database_name]

# get the collection
mycol = db[collection_name]

from bson import ObjectId
from random_object_id import generate

# create a sample dictionary for the collection data
mydict =  "_id": ObjectId(generate()),
           "attributes_names": "email", 
           "attributes_datype": "string", 
           "attributes_isNull":"false", 
           "attributes_std_function" : "email_valid" 

# insert the dictionary into the collection
mycol.insert_one(mydict)

要在MongoDB 中插入多个值,请使用 insert_many() 而不是 insert_one() 并将字典列表传递给它。所以你的字典列表看起来像这样

mydict = [ "_id": ObjectId(generate()),
           "attributes_names": "email", 
           "attributes_datype": "string", 
           "attributes_isNull":"false", 
           "attributes_std_function" : "email_valid" ,
            "_id": ObjectId(generate()),
           "attributes_names": "email", 
           "attributes_datype": "string", 
           "attributes_isNull":"false", 
           "attributes_std_function" : "email_valid" ]

MongoDB集合中的所有数据获取到python脚本中:

data = list()
for x in mycol.find():
  data.append(x)

import pandas as pd
data = pd.json_normalize(data)

然后在访问字典列表的元素时访问数据:

value = data[0]["attributes_names"]

【讨论】:

多属性怎么办。 创建所有数据的列表并使用 insert_many() 而不是 insert_one(),我也更新了答案 我无法在直接 mongodb 中写入 id 部分。 是的,我认为当您在没有 python 的情况下直接在 MongoDB 上工作时,MongoDB 会生成自己的 id。如果它没有生成,那么也许你也可以从 python 代码中删除它 是的,你是对的。我已将其删除并且工作正常。

以上是关于如何通过获取mongodb集合值来调用python函数的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Python Flask 的 HTML 表单搜索 MongoDB 集合

MongoDB:如何使用 _id 获取集合中的最新文档?

Python MongoDB 删除集合

Python MongoDB 删除集合

如何在 MongoDB 中获取集合的计数?

mongodb如何从集合中获取最大值