Я создаю запрос для извлечения элементов из коллекции монго, используя MongoTemplate. Критерии запроса содержат свойство со знаком подчеркивания, которое каким-то образом заменяется на '._', в результате чего запрос всегда возвращает 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, подчеркивая символ «\\» и используя юникод «app_id». Ни один из них не работал. Важно отметить, что в моей базе данных существует коллекция с именем «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
записи представляют собой массив с коллекцией в следующем формате:
{
"instanceId" : "654ba2d16579e",
"app_id" : "583471adb0",
"unique_app_id" : "554577506",
"value" : 169
}
Стоит отметить, что тот же запрос (без замены символа подчеркивания) отлично работает в IDE mongo (в данном случае Robomongo).
Я использую spring-boot-starter-data-mongodb 1.4.1.RELEASE.
У меня сейчас совсем нет идей.
Любое предложение ?
entries
документа к своему вопросу? - person Keith   schedule 16.02.2017