sql >> データベース >  >> NoSQL >> MongoDB

挿入リクエストをMongoDBに追加する前にSpringDataで処理するにはどうすればよいですか?

    基本的に2つのリソースが必要なため、ここではSpring Data RESTを使用する代わりに、カスタムコントローラーを作成する方がよいと思われます。1つはリンクを追加するか既存のリソースを返すためのもので、もう1つはハッシュを介して元のURIを取得するためのものです。

    最初のメソッドでは、リポジトリメソッドfindByLongURL(…)を呼び出すだけです。 取得したURLを使用します たとえば、結果が得られた場合、または2番目の手順を実行して実際にハッシュを作成し、URLを保存する場合 インスタンス思考リポジトリ。 2番目のリソースは、基本的に既存のメソッドを呼び出すだけです。

    それは簡単で消化しやすいです。

    前者のメソッドの実装がアトミック操作である必要がある場合は、リポジトリクエリメソッドを手動で実装する必要があります(一般的な手順については、リファレンスドキュメント ):

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

    ご覧のとおり、これにはいくつかの低レベルの詳細の処理が含まれますが(ただし、静的インポートを使用することで冗長性を減らすことができます)、基本的には不可分操作を提供します。




    1. 外部キー制約のmongoDBの代替

    2. アカウントを作成してmongodbを実行する方法

    3. Mongodbでの読み取り-独自-書き込みの一貫性

    4. Redisは、反復やポップなしでリストのすべての値をフェッチします