У меня есть один узел в Neo4j, структура которого выглядит следующим образом:Как запросить сбор с использованием cypher в 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>
в шифровальщика запросе?
Пожалуйста, помогите
Да это работает. Но что, если я добавлю другой тег, скажу так: WHERE ALL (x IN ['tag1', 'tag2', 'tag3'] WHERE x in node.tags) –
Тогда он не возвращает ни одного узла –
ВСЕ будут делать убедитесь, что согласованный узел имеет каждый тег, указанный в списке. Если вы хотите, чтобы некоторые из них совпадали, используйте другой вариант из приведенной выше ссылки, например ANY – Luanne