2016-12-27 33 views
1

現在、ノード内のDateプロパティが、提供されたDateの前、等しい、または後である場合、クエリーチェックが必要なNeo4jデータベースを備えたシステムを設計しています。私はのNeo4jノードプロパティの内部Date==>ような単純なオペレーターに例えば基づいて、サイファークエリとの比較を行うことができるように保存する必要がありますどのようにNeo4j CypherがCypherクエリーの日付を比較しています

<

はそれがLong timestampのようなDateを保存しても大丈夫ですか?この方法でうまくいくのだろうか?いいえの場合は、より良い決定を提案してください。 Valueのデータベース・レベルで

MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User) WHERE id(parentD) = {decisionId} MATCH (childD)<-[:SET_FOR]-(filterValue153:Value)-[:SET_ON]->(filterCharacteristic153:Characteristic) WHERE id(filterCharacteristic153) = 153 WITH filterValue153, childD, ru, u WHERE (filterValue153.value = '60305027689736') 

MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User) WHERE id(parentD) = {decisionId} MATCH (childD)<-[:SET_FOR]-(filterValue153:Value)-[:SET_ON]->(filterCharacteristic153:Characteristic) WHERE id(filterCharacteristic153) = 153 WITH filterValue153, childD, ru, u WHERE (filterValue153.value = 'Mon Dec 27 22:35:56 EET 3880') 
filterValue153.valueValue.valueノードプロパティで java.util.Dateオブジェクトと同様に格納されている

@NodeEntity 
public class Value extends Authorable { 

    public final static String NODE_NAME = "Value"; 

    private final static String SET_FOR = "SET_FOR"; 
    private final static String SET_ON = "SET_ON"; 

    @Relationship(type = SET_FOR, direction = Relationship.OUTGOING) 
    private Decision decision; 

    @Relationship(type = SET_ON, direction = Relationship.OUTGOING) 
    private Characteristic characteristic; 

    private Object value; 

... 

} 

:ノー運と試みた

クエリを更新し

ノードllowingデータ:

id: 848013 
value: 1482873001556 

が更新

このクエリは正常に動作します

MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User) WHERE id(parentD) = {decisionId} MATCH (childD)<-[:SET_FOR]-(filterValue153:Value)-[:SET_ON]->(filterCharacteristic153:Characteristic) WHERE id(filterCharacteristic153) = 153 WITH filterValue153, childD, ru, u WHERE (filterValue153.value = 60305030539682) 

が、日付前に、1970年1月1日00:00:00 GMTに対処するには? ,><操作をこのCypherクエリで日付に適用することもできますか?

答えて

1

関連質問:

しかし、その質問は、私たちがdate/time conversionをサポートするAPOCを持って、それ以来戻って2012年にまでさかのぼります。これにより、Javadoc of the SimpleDateFormat classに記述されている形式の日付/時刻値を変換できます。

1970年1月1日より前の日付は、negative numbersで簡単に表されます。たとえば:

CALL apoc.date.parseDefault('1969-07-21 02:56:15', 's') 
YIELD value 

算術比較演算子(=<><、...)は、タイムスタンプに動作します。

+0

あなたの答えをありがとう。私はより詳細な質問を更新しました。何が間違っているのか教えてください。また、古いものと新しいもの(APOC付き)のアプローチをどのように行うことができるかの例を示してください。 – alexanoid

+0

このクエリでノードを返すだけであれば、どのような結果が得られますか? 'MATCH(filterCharacteristic153:Characteristic)WHERE id(filterCharacteristic153)= 153 RETURN *' –

+0

Neo4jから 'Value'ノードの出力を追加しました – alexanoid

関連する問題