В Spring загрузите преобразование шестнадцатеричного String в ObjectId для агрегации в MongoDB - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть код ниже

@Override
public List<Snapshots> getData(final String modelId) {

    Criteria criteria = Criteria.where("modelId").is(new ObjectId(modelId));

Он не возвращает никаких результатов. Это эквивалентно запросу mon go ниже

db.Snapshots.aggregate([
      { 
     "$match":{ 
        "modelId":{ 
           "$oid":"5db6ce13f74c7f9f982f2598"
     }
  },

Я знаю, что выше не будет работать, так как mon go не знает, что такое "$ oid is". Если изменить его на ObjectID ("5db6ce13f74c7f9f982f2598"), то он будет работать в оболочке mon go. Пожалуйста, дайте мне знать, как я могу передать этот шестнадцатеричный идентификатор из весны. Этот modelId подобен objectID другой коллекции и упоминается как внешний ключ в коллекции Snapshots.

1 Ответ

0 голосов
/ 11 февраля 2020

Вы либо сохраняете (и выполняете поиск) шестнадцатеричную строку или ObjectId

{
   ...,
   'modelId':{
        ObjectId('5db6ce13f74c7f9f982f2598')
    },
   ...
}
Criteria.where("modelId.$oid").is(new ObjectId(modelId))

или

{
   ...,
   'modelId': '5db6ce13f74c7f9f982f2598',
   ...
}
Criteria.where("modelId.$oid").is(modelId)

Вы пробовали Spring-data-mongodb's @DBRef

...