sql >> Databáze >  >> NoSQL >> MongoDB

Jak zpracovat požadavky na vložení do Spring Data před jejich přidáním do MongoDB?

Zdá se, že je lepší napsat si vlastní řadič namísto používání Spring Data REST zde, protože v podstatě potřebujete dva zdroje:jeden pro přidání odkazu nebo vrácení existujícího a druhý pro načtení původního URI prostřednictvím jeho hash.

V první metodě byste jednoduše zavolali metodu úložiště findByLongURL(…) a použijte získanou URL například, pokud máte výsledek nebo udělejte druhý krok, abyste skutečně vytvořili hash a uložili URL úložiště instancí myšlenek. Druhý zdroj by vám v podstatě jen zavolal již existující metodu.

To je přímočaré a snadno stravitelné.

Pokud potřebujete, aby implementace předchozí metody byla atomická operace, je třeba metodu dotazu na úložiště implementovat ručně (obecné pokyny k tomu si přečtěte v příslušné části v referenční dokumentace ):

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 můžete vidět, zahrnuje to práci s některými detaily nižší úrovně (ačkoli výřečnost lze snížit použitím statických importů), ale v podstatě vám to dává atomickou operaci.




  1. Mongoid najít vložený dokument

  2. Schéma Mongoose s vnořeným volitelným objektem

  3. Jak exportovat výsledky dotazu MongoDB do souboru CSV

  4. Zpětné volání Node.js s aktualizací MongoDB se nikdy nevrátí, ačkoli aktualizuje DB