Java com.mongodb.util.JSON.parse解析JSON和指定投影时的限制

Java com.mongodb.util.JSON.parse解析JSON和指定投影时的限制,java,json,mongodb,parsing,mongo-java,Java,Json,Mongodb,Parsing,Mongo Java,我正在使用com.mongodb.util.JSON和parse方法查询mongodb数据库 我在一个特定的查询中遇到了一个问题,我想选择要显示的特定字段 mongoshell查询: {{type:'exam'},{score:1,{u id:0}} 在Java中: String query="{{type:'exam'},{score:1,_id:0}}"; DBObject dbObject=(DBObject) JSON.parse(query); List<DBObject>

我正在使用
com.mongodb.util.JSON
parse
方法查询mongodb数据库

我在一个特定的查询中遇到了一个问题,我想选择要显示的特定字段

mongoshell查询:

{{type:'exam'},{score:1,{u id:0}}

在Java中:

String query="{{type:'exam'},{score:1,_id:0}}";
DBObject dbObject=(DBObject) JSON.parse(query);
List<DBObject> dbOList=coll.find(dbObject).toArray();
我试图在JAVA中使用的mongoshell查询:

db.grade.find({type:exam},{score:1,_id:0})

此查询显示在shell only
score
字段中,如我所需

问题是当我在JAVA中使用
JSON.parse
进行解析时


伊斯梅尔

你为什么不试试这样的

String json = "{'type':'exam','score':1,'_id':0}";
DBObject dbObj = (DBObject) JSON.parse(json);
正如你所期望的那样,它最终会得到正确的结果

{ "type" : "exam" , "score" : 1 , "_id" : 0}
原因很明显,它不能解析字符串,只能解析JSON


正如我们看到的,您的想法和结果都是在同一个查询框架中完成的

请理解mongo查询是如何工作的

就mongodb而言,查询模式和投影模式是这样的

collection.find(query,projection); --> grade.find({type:exam,_id:0},{score:1});
所以很明显,您需要分离查询和投影部分。因此,请按照以下方式按预期执行查询

    String json = "{'type':'exam','student_id':0}";
    DBObject dbObj = (DBObject) JSON.parse(json);
    DBObject projection = (DBObject) JSON.parse("{'score':1,}");
    System.out.println(dbObj);
    Dao dao = new Dao();
    final DBCollection collection = dao.getDb("test").getCollection("test");
    **List<DBObject> dbOList=collection.find(dbObj,projection).toArray();**
    System.out.println(dbOList);
感谢和问候,
Hari

您确定您的JSON有效吗?在有效的JSON文件中,所有内容都必须用引号括起来。也许这就是问题所在。@DmitryTsechoev此JSON有效且在mongoshell中有效。@morkro引号在
JAVA
中执行查询时不是问题,JSON无效。有两个对象既不是键的值,也不是数组的元素。有关JSON标准的详细信息,请参阅。按u编写JSON并没有解决我的问题。当我执行
查找
时,我仍然有一个空的
列表
。查询并不是要显示所有
考试
分数
1和
id
0。这是关于只显示
score
字段。伊斯梅尔,我知道这是一个示例json,所以请给我您的示例数据库数据,并将您构建的查询发送给我们。顺便告诉我们你对数据库数据的期望。你能看一下编辑吗。
    String json = "{'type':'exam','student_id':0}";
    DBObject dbObj = (DBObject) JSON.parse(json);
    DBObject projection = (DBObject) JSON.parse("{'score':1,}");
    System.out.println(dbObj);
    Dao dao = new Dao();
    final DBCollection collection = dao.getDb("test").getCollection("test");
    **List<DBObject> dbOList=collection.find(dbObj,projection).toArray();**
    System.out.println(dbOList);
[{ "_id" : { "$oid" : "53d8574e26b7d8cafbf80f9b"} , "score" : 54.6535436362647}]