[英]How to fetch all data quickly from mongodb using indexing field without using limit
[英]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.