2016-05-07 13 views
0
Cursor changeCursor = r.table("users").changes().run(conn); 
for (Object change : changeCursor) { 
    System.out.println(change); 
} 

sind, muss ich nur Änderungen einmal wissen. Ich weiß, "changeCursor.close()" kann Feeds stoppen. Das Problem ist, wie kann ich die Größe der Änderungen dieses Mal wissen !!Wie kann ich Changefeeds in RethinkDB abbestellen? Wenn Änderungen über

Wenn drei Benutzer hinzugefügt wurden, führen "System.out.println (ändern)" die Zeiten aus. Wenn nur ein Benutzer hinzugefügt wurde, wird "System.out.println (ändern)" einmal ausgeführt. Dann muss ich Changefeeds in RethinkDB abbestellen.

changeCursor.toList(); 
changeCursor.iterator(); 

Nichts tun!

changeCursor.hasNext(); 

Alaways wahr!

Ich kenne die Anzahl der Änderungen nicht. Ich weiß nicht, wann ich die Methode changeCursor.close() ausführen soll.

Antwort

0

Ich bin nicht wirklich sicher, was Sie fragen. Es scheint, dass Sie sofort die erste Änderung erhalten möchten und schließen Sie sie dann.

Sie können mit JavaScrip Fahrer so etwas tun:

var r  = require('rethinkdb') 

r.connect({ 
    host: 'localhost', 
    port: 28015, 
}) 
.then(function(conn) { 
    return r.table('users').changes().run(conn) 
}) 
.then(function(cursor) { 
    cursor.next() 
    .then(function(doc) { 
     console.log(doc) 
     //Ok, now right after we get the first doc, we will close the cursor 
     cursor.close() 
     // if we want, we can also close connection 
     // cursor.close().then(conn.close()) 
    }) 
}) 
+0

Ich brauche alle Änderungen nur beim ersten Mal zu behandeln. Nicht nur die erste Platte. Wenn drei Datensätze gleichzeitig geändert werden, wie kann ich die changeFeeds-Größe (3) ermitteln? Nachdem ich die drei Datensätze bearbeitet habe, muss ich den Cursor schließen. –

+0

@ 李小明 Nein, das geht leider nicht. Stellen Sie sich vor, der Änderungsfeed ist ein unendlicher Stream, Sie können ihn nicht zählen. Sie müssen darum herum entwerfen. Können Sie Ihr Problem beschreiben und vielleicht finden wir eine andere Lösung? – kureikain

+0

Ich entwickle ein IM-System. RethinkDB ist sehr geeignet. Aber Android unterstützt Java8 nicht ... Ich benutze Socket, um die RethinkDB-Änderungen zu füttern. Wenn sich die Nachricht ändert, sendet Socket eine Nachricht an android. Android sendet eine Nachricht zurück, um Socket-Server "Nachricht empfangen" mitzuteilen. Es gibt nur einen Socket, der folgendermaßen funktioniert: "Ich bin bereit" -Nachricht von App> Feed-Änderungen> Wenn Änderungen passieren, alle Daten in diesem Feed behandeln (wenn 3 Daten ein, drei verarbeiten) und dann zusammen an App senden> App sende "ich bin bereit, ich habe [message1, message2, messsage3]" zurück zum server> server feed wechselt wieder. –