Java实体管理器 - JSON读者期待一个值,但发现'db'

时间:2016-09-07 14:59:19

标签: java json mongodb entitymanager

我已经使用此代码:

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对象中对它进行排序吗?

4 个答案:

答案 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} ] }")正常工作。