MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

System głosowania z Backbone.js

Nie musisz zapisywać całego modelu na serwerze tylko po to, aby zmienić jedną rzecz, możesz (i powinieneś w tym przypadku) dodać upVote metody do modelu, która wykonuje wywołanie AJAX „zwiększenie głosów za” na serwerze. W swoim modelu miałbyś coś takiego:

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

A wtedy widok będzie miał to do obsługi akcji upvote:

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

i prawdopodobnie miałbyś detektor zdarzeń zmian w upVotes modelu właściwość, aby poprawnie zwiększyć wyświetlany licznik głosów za (jeśli masz coś takiego).

Ponadto Twój /some/upvote/path na serwerze po prostu wyśle ​​$inc aktualizacja do MongoDB, aby uniknąć tego samego problemu "dwie rzeczy dzieją się na raz" na twoim serwerze. Jeśli korzystasz z relacyjnej bazy danych, chciałbyś zrobić coś takiego jak update t set upvotes = upvotes + 1 where id = ? .

W przypadku prostej operacji inkrementacji nie ma potrzeby wykonywania w obie strony „zapytania, aktualizacji, zapisania” ani na kliencie, ani na serwerze. Zamiast tego potraktuj przyrost jako pojedynczą operację inkrementacji i przesuń ten przyrost aż do ostatniej trwałej warstwy przechowywania danych.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. dostęp do obiektu mongodb z mappera (MapReduce)

  2. Mongoose async/await znajdź, a następnie edytuj i zapisz?

  3. policz mongodb w php

  4. Aplikacja nodejs - połączenie mongodb kończy się niepowodzeniem z błędem ECONNREFUSED

  5. Znajdź dokumenty w MongoDB, których pole tablicy jest podzbiorem tablicy zapytań