2017-02-21 6 views
2

NEO4Jインスタンスに接続するREST APIを構築しています。私は基礎としてkoa-neo4jライブラリを使用しています(https://github.com/assister-ai/koa-neo4j-starter-kit)。私はこれらすべての技術の初心者ですが、このフォーラムの助けを借りて基本的な機能が動作しています。たとえば、以下のコードでは、ラベル "metric"を持つ新しいノードを作成し、nameとdateAdded propertisを設定することができます。プロパティとノードのセットをPOST文として渡すKOA-NEO4JまたはBOLT

URL:

/metric?metricName=Test&dateAdded=2/21/2017 

index.js

app.defineAPI({ 
    method: 'POST', 
    route: '/api/v1/imm/metric', 
    cypherQueryFile: './src/api/v1/imm/metric/createMetric.cyp' 
}); 

createMetric.cyp」

CREATE (n:metric { 
    name: $metricName, 
    dateAdded: $dateAdded 
}) 
return ID(n) as id 

しかし、私はstrugglですより複雑な例に私がどのようにアプローチできるかを知ることです。事前に新しいノードを作成するときに追加するプロパティーの数や、単一のpostステートメントで複数のノードを作成するときに、どのようなプロパティーが追加されるか分からない状況をどう処理できますか?理想的には、POSTの一部としてJSONのようなものを渡すことができるようにしたいと思います。これには、作成したいノード、ラベル、プロパティがすべて含まれています。このようなことは可能でしょうか?以下のCypherクエリを使用してPOST本体にJSON文字列を渡してみましたが、動作しませんでした。

UNWIND $props AS properties 
CREATE (n:metric) 
SET n = properties 
RETURN n 

私は、BOLTプロトコルとKOA-NEO4Jフレームワークの代わりにNeo4j Rest APIを切り替えるほうがよいでしょうか。私の研究では、BOLTを使う方が良いと思っていましたが、私はフロントエンドとバックエンドの間の中間層としてRest APIを使いたいので、長期的にはもっと簡単にやり直したいと思っています。

ありがとうございました!

答えて

3

あなたのCypher構文はいくつかの点で悪いです。

  1. UNWINDは、文字列ではなく引数としてコレクションを受け入れます。
  2. SET n = propertiesは、propertiesが文字列ではなくマップである場合にのみ有効です。
  3. このクエリは、( $propsは、新しく作成したノードに格納したいすべてのプロパティを含むマップであると仮定して)単一ノードを作成するために働く必要があり

CREATE (n:metric $props) 
RETURN n 

作成したい場合は複数のノード、このクエリ(あなたと本質的に同じ)が動作するはずです(ただし、$prop_collectionがマップの集まりである場合のみ):

UNWIND $prop_collection AS props 
CREATE (n:metric) 
SET n = props 
RETURN n 
+0

ありがとうございました。私はあなたのコードを試して、次の "props = [{metricName:"テスト名 "、dateCreated:" 02/21/2017 "}]"を渡しましたが、 "ノード作成用に提供されたパラメータがマップではありません"というエラーが表示されます。明らかに、私は "マップ"を正しく構成していません - これに関するあらゆるポインタ? – n4nite

+1

@ n4niteあなたのpropsパラメータはマップでなければならず、クエリで使用する値はマップ内のエントリであり、その値はマップのコレクションです。サイバーサムの例を使用している場合、 '$ prop_collection'パラメータを使うには、あなたの小道具は次のようになります:' props = {prop_collection:[{metricName: "テスト名"、dateCreated: "02/21/2017"}] } ' – InverseFalcon

+0

Neo4jで地図を読み上げることができますが、これはうまくいかず、Googleを検索するとほとんど見つからないのですか?私は例を使用して、POSTステートメントの一部として "props"文字列をAPIに渡していますが、 "ノード作成のために提供されたパラメータはマップではありません"というエラーが表示されます。 – n4nite

1

のNeo4jの引数、これはboltオーバーjscypher間の型変換に関係しているような複雑な型を渡そうとして公式neo4j JavaScript driverレポで問題を提出する以外何ができるくらいの1がないとき、私はあまりにも困難に直面しています。 koa-neo4jは、フードの下で正式なドライバを使用します。koa-neo4jにこのようなシナリオについて移動する

一つの方法は、サイファーに送信する前に、引数を操作するためにJavaScriptを使用している:

また

https://github.com/assister-ai/koa-neo4j#preprocess-lifecycle

可能さらに後処理ライフサイクルフックを使用してサイファークエリの結果を操作します:

https://github.com/assister-ai/koa-neo4j#postprocess-lifecycle

+0

こんにちはKeyvan。あなたのコメントと素晴らしいKoa-Neo4jフレームワークに感謝します。私は、Node、Koa、Neo4jの両方に慣れていないので、フレームワークは素晴らしい起動方法です。私がコーディングスキルを習得したら、フレームワークに貢献したいと思っています! – n4nite

+0

Cheers @ n4nite、フレームワーク関連の問題が発生した場合は、私は喜んでお手伝いいたします.GitHubの問題を報告してください(https://github.com/assister-ai/koa-neo4j/issues)ifあなたは1つに遭遇しました。私はあなたが 'koa-neo4j'でクールなことをしているのを見てうれしく思います。 – Keyvan

関連する問題