предел шифрования в neo4j, включая повторяющиеся строки

Использование Neo4J с Cypher

Я пытаюсь найти то, что по сути является «стеной» пользователя. На этой стене есть сообщения от вас, ваших друзей и комментарии.

Это мой запрос до сих пор:

match (a:Account)-[:FRIEND*0..1]->(friend:Account)-[:POST]->(post:Post)
where a.uid = "u132984734sas"optional match (post)<-[:COMMENT*0..1]-(comment:Comment)<-[:AUTHOR]-(commentAuthor:Account)
return friend,post,comment,commentAuthor
ORDER BY post.date_created DESC
LIMIT 10

Обратите внимание LIMIT 10

Ну, я наполовину ожидал этого, но очень похоже на Doctrine в PHP при извлечении вложенных массивов вещей, здесь возвращается строка с сообщением верхнего уровня и отдельным комментарием для каждого комментария в сообщении.

Это означает, что если есть 20 постов, которые соответствуют этому критерию БЕЗ получения комментариев, он вернет 10 реальных постов благодаря LIMIT критерии
Допустим, одно сообщение в первых 10 результатах содержит 2 комментария, теперь в resultSet будет только 9 сообщений вместо 10. Поскольку первый комментарий всегда возвращается в первой строке, если он доступен, он не отвлекает форму. число, возвращаемое набором результатов, но каждый дополнительный комментарий к сообщению делает.

Я хотел бы получить достоверные 10 результатов здесь, но я не уверен, что делать здесь.

Для краткости я использую Обыватель \ Neo4JPHP

Я даже подумывал о том, чтобы запросить 50 постов и обрезать только выбор 10 лучших результатов, но это явно не так, ха-ха

3

Решение

Вот небольшое изменение того, что @FrobberOfBits предложил в своем комментарии к вопросу.

Когда используешь агрегирование, вместо создания двух коллекций (одна для comment и еще один для commentAuthor), вы можете создать одну коллекцию, элементы которой comment а также commentAuthor пар.

MATCH (a:Account)-[:FRIEND*0..1]->(friend:Account)-[:POST]->(post:Post)
WHERE a.uid = "u132984734sas"OPTIONAL MATCH (post)<-[:COMMENT*0..1]-(comment:Comment)<-[:AUTHOR]-(commentAuthor:Account)
RETURN friend,post, COLLECT({comment: comment, commentAuthor: commentAuthor}) AS comments
ORDER BY post.date_created DESC
LIMIT 10
1

Другие решения

Других решений пока нет …