2017-03-16 2 views
0

ノードREDでMongoDB用の小さなREST-APIを作成しました。Node-RED REST-APIで番号をフィルタリングする方法

これは正常に動作します:<node-red-url>:<node-red-port>/rest/demoは私にすべてのエントリを示します。

結果をフィルタリングすることもできます。?userName=demoには、{userName: "demo"}というエントリのみが表示されます。

私のDBにはいくつかの値があります。何か{weight: 10}のようなものです。これは、{weight: "10"}ではありません。

ここでは、エントリだけを入力します。{weight: 10}です。しかし、私が?weight=10を追加すると、転送されたパラメータが10"10"に変換します。私のweightの値はすべて数字であり、文字列ではないので、ヒットしません。

何とかフィルタを付けるように付録をweightに変更できますか?あるいは、私はRESTロジックを改良しなければならないのですか?

//編集:私はいくつかのより多くのサーバ・ロジックでこれを固定 UPDATE

[{"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:

これは以下のように私の流れが見えるものです
if (msg.payload.hasOwnProperty('weight')) { 
    msg.payload.weight = parseInt(msg.payload.weight); 
} 

「greate」を検索するためにさらに2つのケースが追加されました

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']; 
} 

これは、これまで正常に動作します: "より」と" 低いよりも、R。

+1

おそらく、ここであなたのフローに関する詳細をお知らせください。スクリーンショットまたはエクスポートされたフローので、あなたがすでに結んでいるものを見ることができます – hardillb

+0

私はちょうど質問を編集し、フローを追加しました – user2699453

答えて

1

OKは、モンゴの問合せにHTTPクエリを変換しています機能ノードを見た、私はモンゴ内の任意のオブジェクトに対して動的にこれを行うには良い方法があるように起こっているとは思いません。

すべてのHTTPクエリparamsが、あなたがちょうどそのフィールド変換できる数ある文書内の特定のフィールドを知っているので、もし文字列であることを行っています。例えば

msg.payload = (msg.req.query); 

if (msg.payload.hasOwnProperty('weight')) { 
    msg.payload.weight = parseInt(msg.payload.weight) 
} 

msg.limit = 100; 
msg.skip = 0; 

return msg; 
+0

ありがとう!だから私はより多くのサーバーロジックが必要です。 – user2699453

+0

もう1つの質問がありますが、それ以上のフィルタリングを行う方法はありますか? 'find({$ gt:30})'のようなもの? – user2699453

+0

は、新しい質問として新しい質問をします – hardillb

関連する問題