sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur bearbetar man infogningsförfrågningar i Spring Data innan man lägger till dem i MongoDB?

Det känns som att du är bättre att skriva en anpassad kontroller istället för att använda Spring Data REST här eftersom du i princip behöver två resurser:en för att lägga till en länk eller returnera en befintlig och en andra för att hämta en original URI via dess hash.

I den första metoden skulle du helt enkelt anropa en lagringsmetod findByLongURL(…) och använd den erhållna URL exempel om du har ett resultat eller tar ett andra steg för att faktiskt skapa hashen och spara URL instans tankeförråd. Den andra resursen skulle i princip bara kalla dig redan befintlig metod.

Det är enkelt och lätt att smälta.

Om du behöver implementera den förra metoden vara en atomoperation måste förvarsfrågemetoden implementeras manuellt (för allmänna instruktioner om det läs upp det relevanta avsnittet i referensdokumentation ):

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 handlar det om att hantera vissa detaljer på lägre nivå (även om utförligheten kan minskas genom att använda statisk import) men ger dig i princip en atomär operation.




  1. Hur ändrar man eves IP-adress?

  2. Hur kan jag använda not like på laravel mongodb?

  3. Hur NoSQL-databaser fungerar på aggregerade funktioner (AVG, SUM, etc)

  4. Felsökning av ett MongoDB Sharded Cluster