繁体   English   中英

从 mongodb 获取所有数据

[英]Fetch all data from mongodb

我正在尝试获取我的 mongodb 集合中的所有数据,但由于某种原因我做不到。

我可以获得多个结果,但如果我尝试获得超过 x 个结果,它将停止工作。

我正在使用 Flask、MongoDB、pymongo 与 mongodb 和 React 一起使用。

这是我的 Flask function。

@ app.route("/escoller-centro-proba", methods=["POST"])
@ cross_origin()
def search_proba():
    if request.method == "POST":
        centros = []
        resultadosPing = []
        resultadosNmap = []
        codigo = request.json['codigo'].upper()
        query = {"centro": {"$regex": codigo}}
        resultados = collection.find(query)

        for resultado in resultados:
            centroId = str(resultado["_id"])
            centros.append({"_id": centroId, "sf": resultado["sf"], "centro": resultado["centro"], "concello": resultado["concello"], "lan": resultado["lan"], "dhcp": resultado["dhcp"],
                            "tecnoloxia": resultado["tecnoloxia"], "tecnoloxia_respaldo": resultado["tecnoloxia_respaldo"], "eva": resultado["eva"]})

        if len(centros) > 1:
            return jsonify({"centros": centros, "resultadosPing": resultadosPing, "resultadosNmap": resultadosNmap})

        return jsonify({"centro": centros[0], "resultadosPing": resultadosPing, "resultadosNmap": resultadosNmap})
    else:
        return "Método non POST"

这里是 JS function。

const escollerCentro = async (e) => {
        e.preventDefault()
        const res = await instance.post("http://127.0.0.1:5000/escoller-centro-proba", {
            codigo: codigo.trim().toUpperCase()
        })

        console.log(res.data)

        if (res.data.centro === "O centro non existe") {
            setError("O centro non existe")
            setIsError(true)
            return;
        }

        if (res.data.centros) {
            tabsInfoVar[value].cras = res.data.centros
            tabsInfoVar[value].centro = {
                centro: "",
                resultadosPing: [],
                resultadosNmap: []
            }
        } 
        if (res.data.centro) {
            tabsInfoVar[value].centro = {
                img: img,
                centro: res.data.centro.centro,
                index: res.data.centro._id,
                concello: res.data.centro.concello,
                lan: res.data.centro.lan,
                dhcp: res.data.centro.dhcp ? "Si" : "Non",
                sf: res.data.centro.sf,
                tecnoloxia: res.data.centro.tecnoloxia,
                tecnoloxia_respaldo: res.data.centro.tecnoloxia_respaldo,
                eva: res.data.centro.eva,
                resultadosPing: [],
                resultadosNmap: []
            }
            tabsInfoVar[value].cras = []
        }
        
        tabsInfoVar[value].resultadosPing = res.data.resultadosPing
        tabsInfoVar[value].resultadosNmap = res.data.resultadosNmap

        const resultadosPing = []
        for (var i = 0; i < tabsInfoVar[value].resultadosPing.length; i++) {
            if(tabsInfoVar[value].resultadosPing[i] !== null) {
                resultadosPing.push(tabsInfoVar[value].resultadosPing[i])
            } else {
                console.log("Resultado con valor nulo")
            }
        }
        
        const resultadosNmap = []
        for (var i = 0; i < tabsInfoVar[value]?.resultadosNmap.length; i++) {
            if(tabsInfoVar[value].resultadosNmap[i] !== null) {
                resultadosNmap.push(tabsInfoVar[value].resultadosNmap[i])
            } else {
                console.log("Resultado con valor nulo")
            }
        }

        tabsInfoVar[value].resultadosPing = resultadosPing;
        tabsInfoVar[value].resultadosNmap = resultadosNmap;
        setTabsInfo([...tabsInfoVar])
    }

正如我所说,如果我获取的结果少于 13 个,则代码有效。 我从数据库中得到一个数组,我的前端可以使用它。 这里有一个例子:我搜索了“RIANXO”,它显示了所有包含“Rianxo”的结果。

在此处输入图像描述

我在这里搜索“CRA”,它应该显示一个包含 168 个结果的数组。 相反,我得到了这个:

在此处输入图像描述

它显示所有结果,但不显示数组,如您所见,如果我想查看所有数据,我必须按下 label(“显示更多”)。

我认为这是 mongodb 的问题,因为我正是这样做的,但使用 excel 而不是 mongodb 并且在获取所有数据时没有问题,127

谢谢你们。

我发现了问题。 当我保存从 excel 到 mongodb 的所有数据时,空单元格填充了 NaN 值,并且当前端试图获取属性时,它以我已经显示的方式显示数据。

答案是使用df = df.fillna (" ")修改这些单元格的值。

这是代码:

for index, centro in enumerate(centros):
   data = df[df["Centro"].str.contains(centro)]
   id = df.iloc[index]["ID"]
   centro = df.iloc[index]["Centro"]
   concello = df.iloc[index]["Concello"]
   lan = df.iloc[index]["LAN"]
   dhcp = df.iloc[index]["DHCP"]
   tecnoloxia = df.iloc[index]["Tecnoloxía Acceso Principal"]
   tecnoloxia_respaldo = df.iloc[index]["Tecnoloxía Acceso Respaldo"]
   eva = "Non"
   if dhcp == "Si":
       dhcp = True
   else:
       dhcp = False
   lan = format_lan(lan)
   df = df.fillna("")
   if tecnoloxia_respaldo == "":
       tecnoloxia_respaldo = "Non ten liña de backup"
   centroNovo = {"sf": id, "centro": centro, "concello": concello, "lan": lan, "dhcp": dhcp,
                 "tecnoloxia": tecnoloxia, "tecnoloxia_respaldo": tecnoloxia_respaldo, "eva": eva}
   print(centroNovo)
   collection.insert_one(centroNovo)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM