从 mongodb 数据库中获取数据时,Fastapi 显示空列表

Posted

技术标签:

【中文标题】从 mongodb 数据库中获取数据时,Fastapi 显示空列表【英文标题】:Fastapi showing empty list when fetching data from mongodb database 【发布时间】:2021-09-23 09:50:47 【问题描述】:

我正在尝试使用 fastapi 获取数据。

我的 database.py 将数据输入到 EventDetails 集合中

import pymongo
import scrap4
from backend.model import EventDetails

client = pymongo.MongoClient('mongodb://127.0.0.1:27017/')

mydb = client['Events']  #database
events = mydb.EventDetails #collection EventDetails

events.insert_many(scrap4.events_list) #data insert

模型.py

from mongoengine import Document,StringField,DateTimeField,URLField

class EventDetails(Document):
    url   = URLField()
    title = StringField()
    date  = DateTimeField()
    link  = URLField()

get_api.py

from fastapi import FastAPI
from backend.model import EventDetails
from mongoengine import connect

app = FastAPI()
connect(db="Events",host = "127.0.0.1",port = 27017)

@app.get("/get_all_events")
def get_all_events():
    details = EventDetails.objects().to_json()
    return "Event_Details" : details

在输出中有一个空列表,尽管 EventDetails 数据库有条目。

"Event_Details":"[]"

【问题讨论】:

【参考方案1】:

Mongo 集合区分大小写,默认情况下,MongoEngine 会将您的 Document 类名称蛇形大小写(请参阅doc)

默认情况下,集合的名称是转换为 snake_case 的类的名称(例如,如果您的 Document 类名为 CompanyUser,则相应的集合将是 company_user)。我

在您的情况下,您使用 pymongo 在名为“EventDetails”的集合中插入,但您的 MongoEngine 模型映射到名为“event_details”的集合。所以你基本上不是从同一个集合中插入和读取。

见下文:

from mongoengine import *
connect(db="Events",host = "127.0.0.1",port = 27017)

class EventDetails(Document):
    url   = URLField()
    title = StringField()
    date  = DateTimeField()
    link  = URLField()

coll = EventDetails._get_collection()
print(coll.name)    # prints "event_details"

你有两个选择:

修复您的 pymongo 插入,使其指向集合“event_details” 强制使用 MongoEngine 文档集合的名称(通过 meta = 'collection': 'EventDetails')

【讨论】:

以上是关于从 mongodb 数据库中获取数据时,Fastapi 显示空列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 从 Mongodb 获取数据时,浏览器会一直加载

从gff3文件中获取fasta文件

从mongodb获取数据时如何使用momentjs格式化时间

在spring boot中使用mongodb从两个集合中获取数据

从mongoDB集合中获取N条最新记录时的回调函数[重复]

从DB2获取数据并使用没有元数据表的Spring Batch保存在MongoDB中