【发布时间】:2014-02-11 09:30:47
【问题描述】:
我有一个 mongodb 集合,其中包含以下结构的多个文档
{
"_id" : "...",
"_class" : "...",
...
"travelers" : [
{
"id": "12345",
"type": "XYZ"
},
{
"id": "67890",
"type": "ABC"
}],
...
}
使用 spring 数据,我能够获取具有旅行者类型 XYZ 的文档:
Query query = new Query(Criteria.where("travelers.type").is("XYZ");
List<Something> something = mongoTemplate.find(query, Something.class, COLLECTION_NAME);
但如果我将查询切换为按旅行者 ID 获取,则不会得到任何结果:
Query query = new Query(Criteria.where("travelers.id").is("12345");
List<Something> something = mongoTemplate.find(query, Something.class, COLLECTION_NAME);
我启用了所有日志,传出查询是{"travelers.id" : "12345"},看起来正确。直接在数据库上运行查询{"travelers.id" : "12345"} 会返回正确的结果。
我在该集合上尝试过的其他查询似乎工作正常。我已经尝试过在 traveller.id 上使用和不使用索引,但在这两种情况下都没有结果。我做错了什么?
【问题讨论】:
-
您能否仔细检查一下 id 确实是一个字符串(因此需要引号)而不是一个整数?
-
已经检查过了。 id 是一个字符串。
-
您确定 COLLECTION_NAME 与 mongo 中的集合匹配吗?
-
@frant.hartm - 是的,集合名称是正确的。正如我所提到的,具有相同集合的其他查询工作正常。
-
尝试将 id 字段重命名为 travelerId - 名称为“id”的字段在映射中得到特殊处理 - 请参阅 docs.spring.io/spring-data/data-mongodb/docs/current/reference/…
标签: mongodb spring-data spring-data-mongodb