我有一个由以下结构组成的Person集合
{
"_id" : ObjectId("54ddd6795218e7964fa9086c"),
"_class" : "uk.gov.gsi.hmpo.belt.domain.person.Person",
"imagesMatch" : true,
"matchResult" : {
"_id" : null,
"score" : 1234,
"matchStatus" : "matched",
"confirmedMatchStatus" : "notChecked"
},
"earlierImage" : DBRef("image", ObjectId("54ddd6795218e7964fa9086b")),
"laterImage" : DBRef("image", ObjectId("54ddd67a5218e7964fa908a9")),
"tag" : DBRef("tag", ObjectId("54ddd6795218e7964fa90842"))
}
请注意,“标记”是DBRef。
我有一个Spring Data finder,如下所示:
Page<Person> findByMatchResultNotNullAndTagId(@Param("tagId") String tagId, Pageable page);
执行此代码时,查找查询如下所示:
{ matchResult: { $ne: null }, tag: { $ref: "tag", $id: ObjectId('54ddd6795218e7964fa90842') } } sort: {} projection: {} skip: 0 limit: 1
哪个好,我收到一个人的回合(限制= 1)。但是页面详细信息不正确。我收藏了31个人,所以我应该有31页。我得到的是以下内容:
"page" : {
"size" : 1,
"totalElements" : 0,
"totalPages" : 0,
"number" : 0
}
计数查询如下所示:
{ count: "person", query: { matchResult: { $ne: null }, tag.id: "54ddd6795218e7964fa90842" } }
与上面的等效查找查询相比,那个tag.id看起来不正确。
我发现如果我向org.springframework.data.mongodb.core.MongoOperations添加一个新方法:
public interface MongoOperations {
public long count(Query query, Class<?> entityClass, String collectionName);
}
然后重新jig AbstractMongoQuery.execute(Query query)
使用该方法而不是使用entityClass参数的类似方法,然后我得到正确的分页结果。
问题:我是做错了还是Spring Data Mongo中的错误?
修改
从Christoph获取灵感我在Git https://github.com/tedp/Spring-Data-Test
上添加了以下测试代码答案 0 :(得分:0)
返回的Page
中包含的信息取决于执行的查询。假设您的集合中总共有31个元素,只有少数元素,甚至只有一个元素可能通过引用id: 54ddd6795218e7964fa90842
标记来匹配给定条件。因此,您只能获得与查询匹配的总元素,而不是集合中的总元素。
答案 1 :(得分:0)
正如Christoph所指出的那样,这个错误实际上是固定的DATAMONGO-1120。我需要覆盖spring数据版本以使用1.6.2.RELEASE直到Spring Boot的下一次迭代,其中可能Spring Data将被提升到至少1.6.2.RELEASE。