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

Jak przetwarzać żądania wstawiania w Spring Data przed dodaniem ich do MongoDB?

Wydaje się, że lepiej jest napisać niestandardowy kontroler zamiast używać Spring Data REST tutaj, ponieważ zasadniczo potrzebujesz dwóch zasobów:jednego do dodania linku lub zwrócenia istniejącego, a drugiego do pobrania oryginalnego identyfikatora URI za pomocą jego skrótu.

W pierwszej metodzie wystarczy wywołać metodę repozytorium findByLongURL(…) i użyj uzyskanego URL wystąpienie, jeśli masz wynik lub wykonasz drugi krok, aby faktycznie utworzyć skrót i zapisać URL repozytorium myśli instancji. Drugi zasób po prostu wywołałby już istniejącą metodę.

To proste i łatwe do strawienia.

Jeśli potrzebujesz implementacji poprzedniej metody jako operacji atomowej, metoda zapytania repozytorium musi być zaimplementowana ręcznie (ogólne instrukcje na ten temat znajdziesz w odpowiedniej sekcji w dokumentacja referencyjna ):

class UrlRepositoryImpl implements UrlRepositoryCustom {

  private final MongoOperations operations;

  public UrlRepositoryImpl(MongoOperations operations) {
    this.operations = operations;
  }

  @Override
  public URL findOrInsert(String source) {

    // What to find?
    Query query = Query.query(Criteria.where("longURL").is(source);

    // What to write if nothing can be found
    Update update = new Update()
      .setOnInsert("longURL", source)
      .setOnInsert("hash", calculatedHash);

    FindAndModifyOptions options = new FindAndModifyOptions.options()
      .returnNew(true) // returns the document insert (if so)
      .upsert(true); // insert document if it doesn't exist

    return operations.findAndModify(query, update, options, URL.class);
  }
}

Jak widać, wymaga to radzenia sobie z niektórymi szczegółami niższego poziomu (chociaż szczegółowość można zmniejszyć za pomocą importów statycznych), ale w zasadzie daje to działanie atomowe.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak korzystać z MongoDB Stitch w aplikacjach na Androida

  2. Wstawianie dużych plików CSV do MongoDB za pomocą Node.js i async.queue

  3. Filtr Linq do MongoDB

  4. warunkowa aktualizacja w mongodb

  5. Angular2 ExpressJs - Przesyłanie plików na serwer