sql >> Database >  >> NoSQL >> MongoDB

Stemsysteem met Backbone.js

U hoeft niet het hele model op de server op te slaan om maar één ding te veranderen, u kunt (en moet in dit geval) een upVote toevoegen methode toe aan uw model die een "increment upvotes" AJAX-aanroep naar uw server doet. In uw model zou u zoiets als dit hebben:

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

En dan zou de weergave dit hebben om de upvote-actie af te handelen:

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

en je zou waarschijnlijk een luisteraar hebben voor veranderingsgebeurtenissen op de upVotes van het model eigenschap om de weergegeven upvote-teller correct te verhogen (als je zoiets hebt).

Verder is uw /some/upvote/path op de server zou gewoon een $inc sturen bijwerken in MongoDB om te voorkomen dat hetzelfde "twee dingen tegelijk gebeuren" probleem op uw server. Als je een relationele database zou gebruiken, zou je uiteindelijk iets willen doen als update t set upvotes = upvotes + 1 where id = ? .

Er is geen "query, update, save"-rondreis nodig op de client of de server voor een eenvoudige stapsgewijze bewerking. Behandel de increment in plaats daarvan als een enkele increment-bewerking en duw die increment helemaal naar uw laatste permanente gegevensopslaglaag.




  1. Rolgebaseerde toegangscontrole afdwingen met ClusterControl

  2. Hoe sessies in MongoDB van NodeJS op te slaan?

  3. MongoDB met CSV-gegevens

  4. Hoe te aggregeren op jaar-maand-dag in een andere tijdzone