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

ページング可能なSpringカスタムクエリ

    ご存知のように、MongoTemplateは完全なページ抽象化をサポートしていません。 KneeLessが言ったように、@Queryを使用できます -いくつかのカスタムクエリを実行するための注釈。

    これだけでは不十分な場合は、SpringリポジトリのPageableExecutionUtilsを利用できます。 MongoTemplateと組み合わせて。

    たとえば、次のようになります:

    @Override
    public Page<XXX> findSophisticatedXXX(/* params, ... */ @NotNull Pageable pageable) {
    
        Query query = query(
                where("...")
                // ... sophisticated query ...
        ).with(pageable);
    
        List<XXX> list = mongoOperations.find(query, XXX.class);
        return PageableExecutionUtils.getPage(list, pageable,
                  () -> mongoOperations.count((Query.of(query).limit(-1).skip(-1), XXX.class));
    }
    

    Springリポジトリも同じことをしています。ご覧のとおり、ここ 、2つのクエリも実行します。



    1. node.jsの$elemMatchプロジェクション

    2. $cond内に$existsを使用した条件付きグループ化

    3. MeteorにMongoデータベースコレクションをドロップする

    4. $elemmatchがMongoDBで機能しない