Ich versuche, eine Rethinkdb-Datenbank mit einem Audit-Trail in node.js zu erstellen.Rethinkdb Audit Trail mit Feld Zeitstempel und Status beim Update/Einfügen
Meine Tabelle enthält die folgenden Felder:
Bestell-ID Menge Preis Status Zeitmarke
Ich habe eine Datei, die ich die folgenden Daten als Beispiel laden:
Bestell-ID ...... Menge ..... Preis
1 .................... '1000' ........ ..100
2 .................... '500' ............ 100
3 ..... ............... '1575' .......... 100
Wenn ich in eine leere Tabelle lade, werden alle diese Zeilen zusammen mit der Zeit eingefügt & Datum und Status auf "aktiv" gesetzt.
Nehmen wir an, ich die Datei laden wieder mit aktualisierten Daten (die Menge der Auftragsnummer 1 wird geändert), zum Beispiel:
Bestell-ID ...... Menge ..... Preis
1 .................... '' .......... 100
2 ... ................. '500' ............ 100
3 ............ ........ '1575' .......... 100
Die Rethinkdb-Abfrage sollte den Status der Zeile mit der Auftrags-ID 1 auf "Ersetzt" setzen und den Zeitstempel aktualisieren. Als nächstes sollte eine neue Zeile mit den aktualisierten Daten eingefügt werden, der Status sollte auf "aktiv" gesetzt und mit einem Zeitstempel versehen werden.
Also meine Tabelle mit den neuen aktualisierten Daten soll wie folgt aussehen:
Bestell-ID ...... Menge ..... Preis ..... Status ...... ....... Zeitstempel
1 .................... '1000' .......... 100 .. .... 'ersetzt' ..... '12:03 AM 22.04.2016'
1 .................... '1010' .......... 100 ....... 'aktiv' ....... '' 12:03 AM 22.04.2016 '
2 ...... .............. "500" ............ 1 00 ...... 'aktiv' ......... '12:00 AM 22.04.2016'
3 ................ .... '1575' .......... 100 ...... 'aktiv' ......... '12:00 AM 22.04.2016'
Jetzt habe ich einen Audit-Trail, um zu sehen, was und wann es geändert/eingefügt wurde.
Ist dies mit rethinkdb in node.js möglich?
@dalanmiller
Ich habe versucht, die Codes zu testen, aber ich verstehe nicht, die prepend und die 0-te.
Eine der Annahmen, die Sie gemacht haben, ist, dass sich nur die Menge ändern kann. Was passiert, wenn sich der Preis ändern kann oder beide gleichzeitig? Es ist möglich, dass ich weitere Felder/Spalten hinzufügen möchte, die auch im Laufe der Zeit aktualisiert werden können.
Es ist auch möglich, dass die Bestellung einige Male wechselt.
Die Daten sind in der Variablen 'Nachricht'. Diese
ist das, was ich für jetzt und es nicht aktualisiert:
r.db('testing').table('orders').filter({Order_ID: message[ticks].Order_ID}).count().run() //count how many rows with this Order_ID
.then(function(feed){
if (JSON.stringify(feed)==1){ //check if the order_id already exist
r.db('testing').table('orders').filter({Order_ID: message[ticks].Order_ID}).update(message[ticks]).do(
function (post) {
return r.branch(post('replaced').eq(0),
false, //if nothing changes, leave it as it is
r.db('testing').table('orders').post('orders').prepend(post('orders').nth(0).merge({message[ticks].Quantity})) // <-- I don't understand how this works
)
}).run()
}
else if (JSON.stringify(feed)==0){
//new order. Insert the order
message[ticks].Timestamp = new Date(); //add timestamp
message[ticks].Status = 'Active'; // add status as 'Active'
r.db('testing').table('orders').insert(message[ticks]).run()
}
Hey Big Skinny, überprüfen Sie meine Antwort und lassen Sie mich wissen, wenn das für Sie funktioniert, – dalanmiller
Hallo, danke für Ihre Eingabe und Zeit. Ich werde es in den nächsten Tagen testen und zu dir zurückkommen. –
@dalanmiller, könnten Sie bitte überprüfen, was ich falsch mache? –