neo4j_run API позволяет ввести карту, но я не знаю синтаксис запроса. В питоне это просто {x}
, Я не могу найти пример neo4j_map
синтаксис.
const char *q = "MATCH (p:Person) WHERE p.age > {age} RETURN p.name AS name, p.age as AGE";
neo4j_run(session, q, my_map)
Как я должен (а) построить my_map
и (б) указать поля в запросе?
ОБНОВЛЕНИЕ: Для первой части, этот тест показывает, как построить карту. Скопировано здесь для наглядности:
START_TEST (invalid_map_value)
{
neo4j_map_entry_t map_entries[] =
{ { .key = neo4j_string("bernie"), .value = neo4j_int(1) },
{ .key = neo4j_int(1), .value = neo4j_int(2) } };
neo4j_value_t value = neo4j_map(map_entries, 2);
ck_assert(neo4j_is_null(value));
ck_assert_int_eq(errno, NEO4J_INVALID_MAP_KEY_TYPE);
}
END_TEST
Карта передана в качестве третьего аргумента neo4j_run
это параметры для запроса. Построение карты требует массива записей и его длины. Если это всего лишь одна карта входа, вы можете передать указатель на одну neo4j_map_entry_t
, Для вашего примера:
const char *q = "MATCH (p:Person) WHERE p.age > {age} RETURN p.name AS name, p.age as AGE";
neo4j_map_entry_t map_entry = neo4j_map_entry("age", 28);
neo4j_value_t params = neo4j_map(&map_entry, 1);
neo4j_run(session, q, params);
Если имеется несколько параметров, создайте массив записей карты, например:
const char *q = "MATCH (p:Person) WHERE {min_age} < p.age < {max_age} RETURN p.name AS name, p.age as AGE";
neo4j_map_entry_t map_entries[2];
map_entries[0] = neo4j_map_entry("min_age", 28);
map_entries[1] = neo4j_map_entry("max_age", 30);
neo4j_value_t params = neo4j_map(map_entries, 2);
neo4j_run(session, q, params);
Вы также можете построить map_entry_t, используя инициализатор, как в примере теста, который вы скопировали. Но обычно яснее использовать neo4j_map_entry
конструктор.
Других решений пока нет …