2016-07-14 14 views
-2

Ich habe diese Abfrageneo4j wie man ein distinct desc limit 10

Ich möchte zuerst 10 verschiedene teams.id erhalten. Wie kann ich das tun?

Es ist diese Abfrage richtig?

match (chatitems) 
with chatitems as C 
match (teams) 
with distinct teams as T 
match (T)-[r:PartOf]-(C) 
with C, T.id as num order by num desc 
return {chatid:C.id, teams:collect(num)[0..10]} 

EDITED

Ich habe diese Abfrage

MATCH (u:User)-[:CreatesChat]-(c:ChatItems) 
with u,count(c.id) as chats 
order by chats desc 
with chats,u 
return chats,u limit 10 

I Chats müssen

in einer anderen Abfrage verwenden
MATCH (c:ChatItems)-[:PartOf]->(t:TeamChatSession)-[:OwnedBy]-() 

Aber ich brauche nur die ersten 10 Codes von Chats. ID und die user.id

Wie kann ich diese Abfrage schreiben, um die 10 Tannen Werte von Chats und Benutzer zu behalten?

+0

Haben Sie es versucht? –

+0

Diese Abfrage ist zu langsam. Es dauert eine lange Zeit und endet nicht – user3712581

+0

Mögliches Duplikat von [Neo4j, wie man die ersten 10 desc Codes erhält] (http://stackoverflow.com/questions/38358351/neo4j-how-to-get-first-10-desc -codes) – Luanne

Antwort

0

Für zusätzliche Betonung fügen Sie Ihren Knoten Labels hinzu! Ihre Anfrage wird unglaublich langsam bleiben, bis Sie es tun!

Also angenommen, dass Sie Etiketten hinzufügen, und vorausgesetzt, dass Ihre: Team-Knoten bereits eindeutig sind (Sie sollten eine eindeutige Einschränkung an Stelle von Team (id) haben), ist dies wahrscheinlich, was Sie suchen:

Sie haben jetzt die Top 10 Teams in Team ID Reihenfolge, wie Sie angefordert haben.

Ihre Abfrage macht jedoch andere Dinge, also denke ich, dass Sie andere Dinge haben, die Sie mit diesen Top 10 Teams machen wollen. Sie müssen uns genau sagen, was Sie damit machen wollen, was Ihr endgültiges gewünschtes Ergebnis ist, wenn Sie die Art von Hilfe suchen, die Sie suchen.

Hier sind ein paar Vermutungen.

Möchten Sie alle Chat-IDs von Chats erhalten, die Teil dieser Top 10-Teams sind? Dann sollte diese Arbeit:

MATCH (team:Team) 
WITH team ORDER BY team.id DESC LIMIT 10 
OPTIONAL MATCH (team)-[:PartOf]-(chat:Chat) 
RETURN team.id, COLLECT(chat.id) AS chats 

Für jede Zeile Sie die Team-ID hat, dann eine Liste von Chat-IDs zu diesem Team gehört.

Wenn dies nicht das ist, was Sie wollen, machen Sie es bitte klar. Es kann auch hilfreich sein, wenn Sie bei einer einzigen Frage bleiben und die Fragen klären und klären, anstatt täglich eine oder zwei neue Fragen zu stellen, die direkt mit dem gleichen Problem zu tun haben.

Ich empfehle auch dringend die gesamte developer manual lesen und durch alle Tutorials in der Browser-Anwendung. Gerade jetzt, was Sie am meisten brauchen, ist ein solides Grundverständnis, wie Cypher-Abfragen funktionieren, und dann darauf aufbauen. Der Versuch, hier ohne Grundkenntnisse wiederholt Fragen zu stellen, wird Ihnen nicht dienlich sein.

+0

Ich habe ein Problem mit Etiketten. Wenn ich die Abfrage im Browser neo4j ausgeführt habe, gebe ich keine Zeilen zurück. Warum ist das? – user3712581

+0

Die Abfrage geht davon aus, dass Ihre Teamknoten bereits Folgendes haben: Teambeschriftungen und dass Chatknoten bereits über Folgendes verfügen: Chatlabels. Sie müssen sicherstellen, dass Sie Beschriftungen bei der Erstellung der Knoten anwenden oder sie zumindest später festlegen. Erst nachdem Ihre Knoten markiert sind, wird die Abfrage funktionieren, da die Abfrage explizit nach Knoten mit dem entsprechenden Label sucht. Die allererste Zeile, die zu einem Team passt, kann nur funktionieren, wenn Sie Knoten haben, die wie folgt gekennzeichnet sind: Team. Bitte lesen Sie das Entwicklerhandbuch erneut. Labels und ihre Anwendungen sind ein grundlegender Bestandteil von neo4j, den Sie meistern müssen. – InverseFalcon

+0

Vielen Dank. Ich werde heute Abend nachsehen. – user3712581