Mongodb spring数据mongo-带有查询提示的mongotemplate计数

Mongodb spring数据mongo-带有查询提示的mongotemplate计数,mongodb,spring-data,spring-data-mongodb,mongodb-java,Mongodb,Spring Data,Spring Data Mongodb,Mongodb Java,指定可以使用以下语法为计数查询指定查询提示: db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" } ).hint( { status: 1 } ).count() 您可以使用mongo模板进行此操作吗?我有一个Query对象,正在调用withHint方法。然后调用mongoTemplate.count(查询)但是,我很确定它没有使用提示,尽管我不是肯定的。当然,有几种形式,包括转到基本驱动程序,但

指定可以使用以下语法为计数查询指定查询提示:

db.orders.find(
   { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }
).hint( { status: 1 } ).count()

您可以使用mongo模板进行此操作吗?我有一个
Query
对象,正在调用
withHint
方法。然后调用
mongoTemplate.count(查询)但是,我很确定它没有使用提示,尽管我不是肯定的。

当然,有几种形式,包括转到基本驱动程序,但假设使用定义的类,您可以执行以下操作:

    Date date = new DateTime(2012,1,1,0,0).toDate();
    Query query = new Query();
    query.addCriteria(Criteria.where("ord_dt").gte(date));
    query.addCriteria(Criteria.where("status").is("D"));
    query.withHint("status_1");

    long count = mongoOperation.count(query, Class);
因此,您基本上构建一个对象并使用传递给您的操作的对象,在本例中是
.count()


这里的“提示”是索引的名称,作为要在集合上使用的索引的“字符串”名称。默认情况下可能类似于“status_1”,但不管实际名称是什么。

实际上,这似乎没有使用提示。我使用数据库中不存在的索引名设置了query.withHint。如果我这样运行查询:
mongoTemplate.find(query,Class).size()
它会出现错误
planner返回的错误:错误提示
,但是如果我运行
mongoTemplate.count(query,Class)
它工作正常。也许count没有使用planner,但在我看来它似乎不起作用。@anztenney很清楚地指出,您需要将提示设置为集合中存在的索引的名称。所以你做错了。我想说的是,当使用count时,提示看起来并没有正常工作。我同意我应该发送一个有效的提示名称,但我如何才能验证提示是否真的被发送?@anztenney-um,你可以随意检查解释输出。但是所展示的方法是如何为spring mongodb指定一个
查询
对象的“提示”。它只是调用底层驱动程序方法来执行同样的操作。我本来打算指出,您应该颠倒参数的顺序,以“帮助”查询优化器理解您的意思,而不必首先“强制”使用“提示”。通常,优化器应该“排序”,给定哪个选项产生“最少匹配”,这意味着“最优”。