2016-07-11 12 views
2

neo4jで返されるノードはJSONオブジェクトとして出力される点で特別なようですが、nullの場合はまったく表示されません。ノードから返されたプロパティをホワイトリストまたはブラックリストにする方法はありますか?

例: 私は:Personオブジェクトを持っていて、0以上を持つことができます。

Personには、ID、firstName、lastName、sensitiveThingというプロパティがあります。

sensitiveThingは、当社システムで使用される可能性のあるプロパティ、またはユーザー自身が個人的にアクセスできるプロパティですが、他のユーザーに返すことは望ましくありません。これは私がうまくJSONとして友人の友人を束ねることができますしながら

私はクエリが私の友人のデータを私に恩返ししたい場合は、それらの友人の友人、私はこの

MATCH (me:User{ID:777})-[:Friend]-(friend:User) 
WITH me, friend 
OPTIONAL MATCH (friend)-[:Friend]-(foaf:User) 
WHERE me <> foaf 
RETURN friend.ID, friend.firstName, friend.lastName, COLLECT(foaf) AS FriendOfAFriend 

のようなクエリを使用する場合がありますJSON配列内のオブジェクトを検索し、友人に私以外の他の友人がいない場合は空の配列を正しく返します。このクエリでsensitiveThingを返すことはしません。

私はこのような私が気にフィールドを含むカスタムオブジェクトとCOLLECT(FOAF)を交換しようとした場合:

COLLECT({ID:(foaf.ID), firstName:(foaf.firstName), lastName:(foaf.lastName)}) 

その後、私は私がどこそこにケースを打つまで、私が...欲しいものを手に入れます友人の友達はいません。私が前にノードで作業していたとき、オブジェクトは放出されませんでした。しかし、今、私はこのようなものが私に返されます:

[{ID: (null), firstName: (null), lastName: (null)}] 

これは明らかに私が欲しいものではありません。

理想的には、ノードを返す方法を探していますが、ホワイトリストまたはブラックリストのプロパティを送信したいので、ノードがnullの場合は正しいnull処理を保持できます(

)。

私はそれを持つことができない場合は、カスタムオブジェクトを使用する方法が欲しいですが、すべてのフィールドがnullの場合は、オブジェクトをまったく返しません。

オプションのマッチを処理するためのその他の回避策やヒントは歓迎されていません。

答えて

1

ドキュメントのホワイトリストまたはブラックリストのプロパティーを見たことがありません。

しかし、あなたはextractcollectを連鎖して、カスタムオブジェクトを返すことができます。何の友人が存在しない場合

MATCH (me:User{ID:777})-[:Friend]-(friend:User) 
WITH me, friend 
OPTIONAL MATCH (friend)-[:Friend]-(foaf:User) 
WHERE me <> foaf 
WITH friend, collect(foaf) AS FriendOfAFriend 
RETURN friend.ID, friend.firstName, friend.lastName, 
     extract(foaf in FriendOfAFriend | {ID:(foaf.ID), firstName:(foaf.firstName), lastName:(foaf.lastName)}) AS FriendOfAFriend 

collect空のリストを返します、extractはそのようにそれを維持します。

+0

私は感謝、探していたものだけ!これは、私がドキュメントで勉強することに慣れていないことの1つです。 – InverseFalcon

1

あなたはapoc.map.removeKeysを使用することができます。

WITH {p1: 1, p2: 2, p3: 3, p4: 4} as node 
CALL apoc.map.removeKeys(node, ['p2', 'p4']) YIELD value 
RETURN value 
関連する問題