我已经使用此代码:
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对象中对它进行排序吗?
答案 0 :(得分:2)
这个答案很晚,但我多年来一直在争论相同的问题,所以也许它会帮助别人。
根据this forum post,键和值必须都用引号括起来,因此something__id
应为"something__id"
。
答案 1 :(得分:2)
问题是,如果您要访问的字段类型是String
,则需要在字段值中添加引号。
为了举个例子,我构建了一个用于创建查询的DSL,而不必费心使用MongoDB特定的关键字,例如$eq
,$lt
等等,我遇到了类似的问题。它可以通过添加单引号来解决。
Queries.get(Query.where("name", Operator.is("'Kim'")))
答案 2 :(得分:0)
这可能对某人有帮助,我遇到了类似的错误,最后是因为我缺少索引。
答案 3 :(得分:0)
我正在做的是:@Query("{ {$or:[{'A': 10}, {'B': '20}]}")
在mongo控制台中正常工作。应该@Query("{'$or':[ {'A':10}, {'B':20} ] }")
正常工作。