繁体   English   中英

Spring Data MongoDB中的聚合错误

[英]Aggregation error in Spring Data MongoDB

我目前正在为我的大学项目编写一个webapp。 这是一个允许创建,修改和参加语言测试的系统。 我的老师对我的问题搜索模块感兴趣。 对于数据库,我使用MongoDB。 他问我在浏览器中是否可以查看5kk记录? 他建议我在MongoDB中进行一些汇总。

我必须制定一种搜索方法,使我可以从收集文档中按1到5条标准进行搜索:类别,问题,难度,问题类型,正确答案的数量。 当然可以在浏览器中查看它。

最初,我尝试了一些基本操作,例如使用条件进行新查询,但是我需要它可以用于任意数量的条件,而不是全部或一个。 如果1个或多个字段为空,则不应在搜索中考虑它们,因此我正在尝试进行汇总,但是我无法使其正常工作,并且不知道我要完成的操作是否均匀这种方法可能。

这是我的问题。 在DAO中,我尝试定义一个聚合,但是它无法识别组以及类的方法(方法未定义)。

这是我的代码:

    public List<Question> findQuestions(Question question) {
    String questionPattern = question.getQuestion().length() == 0 ? ".*" : ".*" + question.getQuestion() + ".*";

    TypedAggregation<Question> agg = newAggregation(Question.class, group("category"),
            match(where("category").is(question.getCategory()))

        );

        AggregationResults<Question> result = mongoTemplate.aggregate(agg, Question.class);
        List<Question> stateStatsList = result.getMappedResults();
}

和pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pgs.languageskillchecker</groupId>
<artifactId>LanguageSkillChecker</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>LanguageSkillChecker</name>
<url>http://maven.apache.org</url>

<properties>
    <spring.version>3.1.2.RELEASE</spring.version>
</properties>

<dependencies>

    <!-- Spring -->

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.2.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.2.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.2.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.2.3.RELEASE</version>
    </dependency>

    <!-- Velocity -->

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity</artifactId>
        <version>1.7</version>
    </dependency>

    <!-- Jackson -->

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.12</version>
    </dependency>

    <!-- Servlet -->

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>

    <!-- MongoDB -->    

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.3.3.RELEASE</version>
    </dependency>

    <!-- Sitemesh -->

    <dependency>
        <groupId>org.sitemesh</groupId>
        <artifactId>sitemesh</artifactId>
        <version>3.0-alpha-1</version>
    </dependency>

    <!-- AspectJ -->

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.10</version>
    </dependency>

    <!-- poi -->

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
    </dependency>

    <!-- File upload -->

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3</version>
    </dependency>

</dependencies>

<build>
    <finalName>LanguageSkillChecker</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

我当然会导入所需的库:

import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
import org.springframework.data.mongodb.core.aggregation.Aggregation.*;

我从Spring IO Docs中获取了聚合代码,但无法正常工作。 我将不胜感激^^

您应该看一下Spring Data Specification和Querydsl,google可以帮助您找到如何基于动态标准范围创建自定义搜索的示例。

http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

这是我的问题。 在DAO中,我尝试定义一个聚合,但是它无法识别组以及类的方法(方法未定义)。

这些方法(where和group)是static并且在Criteria和Aggregation类中定义-您只是缺少静态导入。

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
import static org.springframework.data.mongodb.core.query.Criteria.*;

或更具体地

import static org.springframework.data.mongodb.core.aggregation.Aggregation.group;
import static org.springframework.data.mongodb.core.query.Criteria.where;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM