我正在使用 MongoTemplate 构建一个查询以从 mongo 集合中检索元素。查询条件包含一个带有下划线的属性,它以某种方式被替换为“._”,使查询始终返回 0 个元素。
Criteria matchingCriteria = Criteria
.where("entries").elemMatch(Criteria.where("app_id").is(appId))
查看日志,我可以看到生成的查询如下:
o.s.data.mongodb.core.MongoTemplate: find using query: { "entries" : { "$elemMatch" : { "app._id" : "5834718ab0"}}} fields: null for class: Ranking in collection: ranking
我已经尝试过使用 BasicQuery,用 '\\' 斜线下划线,并使用 unicode“app\u005Fid”。它们都不起作用。重要的是要注意我的数据库中存在一个名为“app”的集合。
行为看起来不标准。当我使用另一个带下划线的属性时,该值不会被替换:
Criteria matchingCriteria = Criteria .where("entries").elemMatch(Criteria.where("unique_app_id").is(appId))
日志:
o.s.data.mongodb.core.MongoTemplate find using query: { "entries" : { "$elemMatch" : { "unique_app_id" : "1131706359"}}} fields: null for class: class Ranking in collection: ranking
entries 是一个具有以下格式的集合的数组:
{
"instanceId" : "654ba2d16579e",
"app_id" : "583471adb0",
"unique_app_id" : "554577506",
"value" : 169
}
值得一提的是,相同的查询(没有下划线替换)在 mongo IDE(本例中为 Robomongo)中运行良好。
我正在使用 spring-boot-starter-data-mongodb 1.4.1.RELEASE。
我现在真的没有想法。
有什么建议吗?