Ich habe eine kleine REST-API für meine MongoDB mit Node-RED erstellt.So filtern Sie nach Nummern mit Node-RED REST-API
Das funktioniert gut: <node-red-url>:<node-red-port>/rest/demo
zeigt mir alle Einträge.
ich sogar das Ergebnis filtern: ?userName=demo
Anfügen zeigt nur Einträge, bei denen {userName: "demo"}
.
In meiner Datenbank habe ich einige Werte, die Zahlen sind. So etwas wie {weight: 10}
. Beachten Sie, dass dies NICHT {weight: "10"}
ist!
Jetzt möchte ich nur die Einträge wo {weight: 10}
. Aber wenn ich anschließe ?weight=10
die übertragenen Parameter konvertieren 10
zu "10"
. Das hat keinen Treffer, da alle meine weight
-Werte Zahlen und keine Zeichenfolgen sind.
Kann ich den Anhang irgendwie ändern, um nach weight
zu filtern? Oder muss ich meine REST-Logik verfeinern?
// edit: Dies ist, was mein Flow wie folgt aussieht:
[{"id":"c4a27b53.59303","type":"mongodb in","z":"99225255.0516b8","mongodb":"7e071505.7198bc","name":"","collection":"demo","operation":"find","x":660,"y":580,"wires":[["852d2853.264698"]]},{"id":"af5a916a.08366","type":"function","z":"99225255.0516b8","name":"parseQuery","func":"msg.payload = (msg.req.query);\n\nmsg.limit = 100;\nmsg.skip = 0;\n\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":580,"wires":[["c4a27b53.59303"]]},{"id":"6b0b1b4b.eb8b2c","type":"http in","z":"99225255.0516b8","name":"","url":"/rest/demo","method":"get","swaggerDoc":"","x":120,"y":580,"wires":[["af5a916a.08366"]]},{"id":"852d2853.264698","type":"http response","z":"99225255.0516b8","name":"","x":950,"y":580,"wires":[]},{"id":"7e071505.7198bc","type":"mongodb","z":"","hostname":"192.168.100.166","port":"27017","db":"training","name":"debianTraining"}]
// edit2: UPDATE
Ich reparierte diese mit etwas mehr Server-Logik:
if (msg.payload.hasOwnProperty('weight')) {
msg.payload.weight = parseInt(msg.payload.weight);
}
Ich habe zwei weitere Fälle hinzugefügt, um nach "greate" zu suchen r als "und" kleiner als ":
if (msg.payload.hasOwnProperty('weightG')) {
msg.payload = {"weight": {$gt: parseInt(msg.payload.weightG)}};
delete msg.payload['weightG'];
}
if (msg.payload.hasOwnProperty('weightL')) {
msg.payload = {"weight": {$lt: parseInt(msg.payload.weightL)}};
delete msg.payload['weightL'];
}
Das funktioniert bis jetzt gut.
Sie müssen uns hier wahrscheinlich mehr Informationen über Ihren Fluss geben. Ein Screenshot oder der exportierte Fluss, damit wir sehen können, was Sie bereits verdrahtet haben. – hardillb
Ich habe gerade die Frage bearbeitet und den Fluss hinzugefügt – user2699453