Ausgabe
Ich versuche, die Anzahl der Dokumente in einer Tabelle zu zählen, die eine Bedingung erfüllen.
Mein Code im Knoten: –
const [washingCount, washedCount, dirtyCount] = await Promise.all([
pool.query("SELECT COUNT(*) FROM clothes WHERE status = 'washing'"),
pool.query("SELECT COUNT(*) FROM clothes WHERE status = 'washed'"),
pool.query("SELECT COUNT(*) FROM clothes WHERE status = 'dirty'")
])
Aber ich bekomme die Fehlermeldung:
Fehler: Spalte “count” existiert nicht
Und wenn ich dieselbe Abfrage in die PostgreSQL-CLI kopiere, geben diese die gewünschten Ergebnisse aus.
Den vollständigen Code finden Sie unter:- https://github.com/js313/clothio/blob/master/index.js
Was fehlt mir hier?
Vielen Dank.
Lösung
Warum nicht verwenden group by
?
select status, count(*) from clothes group by status
Bearbeiten
mit einem einfachen Skript wie diesem getestet und funktioniert
require("dotenv").config({ path: "./.env" });
const Pool = require("pg").Pool;
const pool = new Pool({
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME,
});
async function main() {
const result1 = await pool.query("SELECT now()");
console.log(result1);
const result = await pool.query(
"SELECT status, COUNT(*) FROM clothes group by status"
);
console.log(result.rows);
}
main()
.then()
.catch((e) => console.error(e));
Bearbeiten 2
Habe das Problem in deinem Repo-Code gefunden.
Die Reihenfolge der Routenregistrierung ist wichtig, also haben Sie diese Route.
app.get("/clothes/:cloth_id", async (req, res) => {
vor der Zählung eins, also kommt der Express in diese Route und erreicht die count
eine nie.
Um das Problem zu lösen, verschieben Sie die /clothes/count
Route vor die clothes/clothe_id
, und das sollte das Problem lösen
Beantwortet von – JuanDM
Antwort geprüft von – Jay B. (FixError Admin)