sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan behandler man insert-anmodninger i Spring Data, før de tilføjes til MongoDB?

Det føles som om, du er bedre stillet til at skrive en brugerdefineret controller i stedet for at bruge Spring Data REST her, da du grundlæggende har brug for to ressourcer:en til at tilføje et link eller returnere en eksisterende og en anden til at hente en original URI via dens hash.

I den første metode ville du blot kalde en lagermetode findByLongURL(…) og brug den opnåede URL eksempel hvis du har et resultat eller tager et andet skridt til rent faktisk at oprette hashen og gemme URL instans tankedepot. Den anden ressource ville stort set bare kalde dig allerede eksisterende metode.

Det er ligetil og let at fordøje.

Hvis du har brug for, at implementeringen af ​​den førstnævnte metode skal være en atomoperation, skal repository-forespørgselsmetoden implementeres manuelt (for generelle instruktioner om det, læs det relevante afsnit i referencedokumentation ):

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);
  }
}

Som du kan se, involverer dette håndtering af nogle detaljer på lavere niveau (selvom omfanget kan reduceres ved at bruge statisk import), men det giver dig grundlæggende en atomart operation.




  1. Promise og nodejs MongoDB driver

  2. I mongodb-go-driver, hvordan man leder BSON ind i en struktur

  3. GAE ude af stand til at slå SRV-posten op for mongodb atlas-forekomst

  4. MongoDB feltrækkefølge og dokumentpositionsændring efter opdatering