sql >> Databasteknik >  >> NoSQL >> MongoDB

Röstsystem med Backbone.js

Du behöver inte spara hela modellen på servern bara för att ändra en sak, du kan (och bör i det här fallet) lägga till en upVote metod till din modell som gör ett "inkrementera upvotes" AJAX-anrop till din server. I din modell skulle du ha något sånt här:

upVote: function() {
    var self = this;
    $.ajax({
        url: '/some/upvote/path',
        type: 'POST',
        success: function(data) {
            self.set('upVotes', data.upVotes);
        },
        // ...
    });
}

Och sedan skulle åsikten ha detta för att hantera uppröstningsåtgärden:

upVote: function() {
    // Highlight the upvote button or provide some other feedback that
    // the upvote has been seen.
    this.model.upVote();
}

och du skulle förmodligen ha en lyssnare för förändringshändelser på modellens upVotes egenskap för att korrekt öka den visade upprösträknaren (om du har något sådant).

Dessutom, din /some/upvote/path på servern skulle bara skicka en $inc uppdatera in i MongoDB för att undvika samma "två saker som händer på en gång"-problem på din server. Om du använde en relationsdatabas skulle du vilja göra något som update t set upvotes = upvotes + 1 where id = ? .

Det finns inget behov av en "fråga, uppdatera, spara" tur och retur på varken klienten eller servern för en enkel inkrementoperation. Behandla istället inkrementet som en enda inkrementoperation och tryck det inkrementet hela vägen ner till ditt slutliga beständiga datalagringslager.




  1. Hur skickar man en hämtad bild från Mongo med GridFS i Spring Rest Call?

  2. konvertera från blob till binär för att spara den till mongodb

  3. ValueError:Extra Data-fel vid import av json-fil med python

  4. Hur man använder aggregrate i mongodb till $match _id