当前位置: 首页 > 知识库问答 >
问题:

为什么Spring Data MongoDB不提供聚合操作的“提示”选项,MongoDB驱动程序提供,但我不知道如何使用它

葛昱
2023-03-14

我经常使用MongoTemplate进行聚合操作,但效率不高。我想“提示”指定我自己的索引以提高性能

但是,不能在AggregationOptions中添加“hint”选项

我看到DBCollection可能可以做到这一点,但我没有找到一种方法。AggregateOperation不是DBCollection的aggregate方法中的参数,AggregateOperation是我能找到的唯一可以使用“hint”的地方

mongodb version is4.0.4
Spring-data-mongodb version is 2.1.4
The mongodb-driver version is 3.8.2
JDK 11

1.org.springframework.data.mongodb.core.aggregation.AggregationOption可用参数:

public AggregationOptions(boolean allowDiskUse, boolean explain, @Nullable Document cursor,
            @Nullable Collation collation) {

        this.allowDiskUse = allowDiskUse;
        this.explain = explain;
        this.cursor = Optional.ofNullable(cursor);
        this.collation = Optional.ofNullable(collation);
    }

2.com.mongodb.聚合选项可用参数:

AggregationOptions(AggregationOptions.Builder builder) {
        this.batchSize = builder.batchSize;
        this.allowDiskUse = builder.allowDiskUse;
        this.outputMode = builder.outputMode;
        this.maxTimeMS = builder.maxTimeMS;
        this.bypassDocumentValidation = builder.bypassDocumentValidation;
        this.collation = builder.collation;
    }

我只是想通过索引提高查询的效率。查询速度太慢。一个复杂的查询需要20秒。简单查询也需要4~5s。

英语不是很好,如果你表达不清楚,请原谅我。

共有1个答案

申屠弘图
2023-03-14

AggregationOption中的提示是最近实现的[SpringDataMongoDB 3.1版],您可以像这样使用它

    Aggregation
      .newAggregation(aggrgationOperations)
      .withOptions(AggregationOptions.builder().hint(new Document("fieldName", 1)).build()

或者,对于地理空间查询,只需将索引更改为位置字段,如下所示:

AggregationOptions.builder().hint(new Document("fieldName", "2dsphere").build();
 类似资料:
  • 我试图使用AWS SNS连同FCM发送推送通知到我的android应用程序。 AWS文档称: null

  • hybris为面值提供了Solr Sort属性。我可以在HMC中看到每个solr项属性,我们可以设置它的排序行为。 我想用弹劾来设定这种类型。有一个属性(字符串类型),它保存着所选提供者的值,因为我必须在Impex中提供字符串类型,这样它才能工作。 请帮忙。

  • 问题内容: 有人知道为什么JUnit 4提供但不提供方法吗? 它提供了(对应于)和(对应于),因此它们似乎没有包含在内就显得很奇怪。 顺便说一下,我知道JUnit插件提供了我正在寻找的方法。我只是出于好奇而问。 问题答案: 我建议您使用较新的样式断言,该断言可以轻松描述各种否定形式,并在断言失败时自动构建对您的期望和得到的结果的描述: 这三个选项都是等效的,请选择最容易阅读的一个。 要使用方法的简

  • 我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona

  • 问题内容: 我正在尝试将Entity Framework与MySQL配合使用,但出现上述错误。我安装了最新的MySQL连接器。 完整错误为: 但是,我找不到任何建议说明您如何在“ entityFramework”部分中进行注册的内容。 其他一些帖子(例如)建议将提供程序添加到该 部分中,如下所示: 但这不起作用,因为它声称名称是重复的。而且,如果我实际上遍历了,我可以看到最后一个是MySQL提供程

  • 如果我创建一个提供者并将其绑定到一个类,就像这样 然后