【问题标题】:Java Entity Manager - JSON reader was expecting a value but found 'db'Java 实体管理器 - JSON 阅读器期待一个值,但找到了 'db'
【发布时间】:2016-09-07 14:59:18
【问题描述】:

我已经有这段代码了:

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 没有问题。现在我想按dateList 进行排序:

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 对象中之后对其进行排序?

【问题讨论】:

  • 我的猜测是您对该特定 API 使用了错误的查询格式。

标签: java json mongodb entitymanager


【解决方案1】:

问题是,如果您要访问的字段类型是String,则需要在字段值中添加引号。

举个例子,我构建了一个小的 DSL 来创建查询,而不必费心使用 MongoDB 特定的关键字,例如 $eq$lt 等,我也遇到了类似的问题。可以通过加单引号来解决。

Queries.get(Query.where("name", Operator.is("'Kim'"))) 

【讨论】:

    【解决方案2】:

    这个答案很晚,但我多年来一直在与同样的问题作斗争,所以也许它会帮助其他人。

    根据this forum post,键和值都必须用引号引起来,因此您的something__id 应该是"something__id"

    【讨论】:

      【解决方案3】:

      这可能对某人有帮助,我遇到了类似的错误,最后是因为我缺少索引。

      【讨论】:

        【解决方案4】:

        我正在做的是:@Query("{ {$or:[{'A': 10}, {'B': '20}]}") 在 mongo 控制台中工作。它应该是 @Query("{'$or':[ {'A':10}, {'B':20} ] }") 完美工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 2021-06-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多