У меня уже работает этот код:
EntityManager entityManager = getEntityManager();
entityManager.getTransaction().begin();
String query = "db.Band.find({})";
List<Band> list = (List<Band>) entityManager.createNativeQuery(query, Band.class).getResultList();
entityManager.close();
return list;
Он возвращает List
без проблем. Теперь я хочу отсортировать этот List
по date
:
EntityManager entityManager = getEntityManager();
entityManager.getTransaction().begin();
String query = "db.Band.find({something__id:ObjectId(\"" + myId + "\")}).sort({\"somethingelse.date\":-1})";
List<Band> list = (List<Band>) entityManager.createNativeQuery(query, Band.class).getResultList();
entityManager.close();
return list;
Моя консоль дает мне следующее сообщение:
org.bson.json.JsonParseException: JSON reader was expecting a value but found 'db'
Я проверил, что моя String
работает правильно на консоли Mongo, и это произошло. Есть идеи?
Редактирование: я пытался помещать "something__id" между кавычками, потому что он не работал бы даже без части сортировки, если бы я этого не сделал (я просто это понял), но теперь он говорит, что я делаю неподдерживаемый основной запрос, указывая на Сортирующую часть, Должен ли я сортировать его после того, как у меня уже есть его в объекте List?
Дело в том, что если тип поля, к которому вы хотите получить доступ, - это String
вам нужно будет добавить кавычки к значению поля.
Чтобы дать вам пример, я создал небольшую DSL для создания запросов, не беспокоясь о специфических ключевых моментах MongoDB, таких как $eq
, $lt
и т.д., И у меня была аналогичная проблема. Его можно решить, добавив одиночные кавычки.
Queries.get(Query.where("name", Operator.is("'Kim'")))
Этот ответ запоздал, но я боролся с той же проблемой целую вечность, поэтому, возможно, это поможет кому-то другому.
В соответствии с этим сообщением в форуме ключи и значения должны быть заключены в кавычки, поэтому вы должны something__id
____ быть "something__id"
.
Это может кому-то помочь, у меня была похожая ошибка, и в конце концов это произошло из-за того, что мне не хватало индекса.