mi modelo de base de datos se ve así ...
from pydantic import BaseModel class Store(BaseModel): name: str store_code : str
y puede haber los mismos nombres de tiendas en db con diferente store_code. lo que quiero es filtrar toda la información de las tiendas con los mismos nombres. por ejemplo, si mi db es así...
{ name:lg store_code: 123 name:lg store_code:456 }
Me gustaría ver todos esos dos documentos, mi código api rápido de python es así ...
from fastapi import FastAPI, HTTPException from database import * app = FastAPI() @app.get("/api/store{store_name}", response_model=Store) async def get_store_by_name(store_name): response = await fetch_store_by_name(store_name) if response: return response raise HTTPException
y este es mi código de consulta mongo...
from pymongo import MongoClient from model import Store client = MongoClient(host='localhost', port=27017) database = client.store async def fetch_store_by_name(store_name:str): document = collection.find({"name":store_name}) return document
Pensé en el documento, eventualmente habría dos documentos. pero siempre hay un error como este
pydantic.error_wrappers.ValidationError: 1 validation error for Store response value is not a valid dict (type=type_error.dict)
hay alguien que me ayude por favor?
++++
Acabo de cambiar mi consulta así
async def fetch_store_by_name(store_name:str): stores = [] cursor = collection.find({"name":store_name}) for document in cursor: stores.append(document) return stores
esto debería devolver dos documentos como esperaba pero todavía tiene
ValueError: [TypeError("'ObjectId' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')]
este error.
Creo que mi código fast-api tiene un problema que realmente no tengo idea...
async def fetch_store_by_name(store_name:str): stores = [] ---Fault in this line--- cursor = collection.find({"name":store_name}) for document in cursor: stores.append(document) return stores
las tiendas deben ser un valor de cadena, no una lista, ya que Mongodb intentará encontrarlo como el valor predeterminado que proporcionó. En este caso - str