2015-06-04 55 views
2

我在Neo4j的,其結構看起來像一個節點:如何在neo4j中使用密碼來查詢集合?

{ 
      "nodeId": 32, 
      "id": "0290cf88-3345-4c30-8e5f-7ce0cb3f0b6b", 
      "type": "User", 
      "name": "Mahendra", 
      "index": 0, 
      "data": "This is sample user", 
      "description": null, 
      "contentBlocks": [], 
      "icon": null, 
      "createdOn": null, 
      "modifiedOn": null, 
      "properties": { 
       "displayName": "Mahendra", 
       "lastName": "Kawde" 
      }, 
      "tags": [ 
       "tag1", 
       "tag2" 
      ], 
      "categories": null 
     } 

現在我想通過傳遞標籤作爲參數傳遞給我的暗號查詢來獲取所有節點。 我正在使用以下查詢:

MATCH (node) WHERE node.tags = ['tag1','tag2'] RETURN node 

這會返回給我帶有給定標籤的所有節點。 但如果我使用以下查詢

MATCH (node) WHERE node.tags = ['tag1'] RETURN node 

它不會返回任何節點。

此外,如果我改變命令可以說['tag2','tag1']它不會返回任何節點。

下面是我的控制器方法:

@RequestMapping(value = "/getByTag",method = RequestMethod.GET, consumes=MediaType.APPLICATION_JSON, produces=MediaType.APPLICATION_JSON)  
    public Result<Node> getByTag(@RequestParam(value="tags") List<String> tags) throws EntityNotFoundException { 
     return nodeService.getByTag(tags); 
    } 

服務方法:

public Result<Node> getByTag(List<String> tags) { 

     HashMap params = new HashMap(); 
     params.put("type",tags); 

     String query = "MATCH (node) WHERE node.tags = "+ tags +" RETURN node"; 

     Result<Node> nodes = neo4jTemplate.query(query, params).to(Node.class); 
     return nodes; 
    } 

你能不能給我一個方式使用集合,在暗號查詢更精確地List<String>

請幫

回答

2

如何

MATCH (node) 
WHERE ALL (x IN ['tag1','tag2'] WHERE x in node.tags) 
RETURN node 

http://neo4j.com/docs/2.2.2/query-predicates.html

+0

是它的工作。 但是如果我添加另一個標籤可以這樣說:WHERE ALL(x IN ['tag1','tag2','tag3'] WHERE x in node.tags) –

+0

然後它不返回任何節點 –

+0

ALL將使確保匹配的節點具有列表中提供的每個標籤。如果你想要一些匹配,然後使用上面的鏈接的另一種變化,如任何 – Luanne