有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

MongoDB集合中的java查询字段。

我试图查询mongodb集合中的特定字段。以下是我的代码和输出:

    Mongo m = new Mongo();
    DB db = m.getDB( "mydb" );
    DBCollection coll = db.getCollection("student") ;


    // adding data 
    BasicDBObject moz = new BasicDBObject();
    moz.put("Name", "Mozammil");
    coll.insert(moz);



    DBCursor cursor = coll.find();


    while (cursor.hasNext()) {
        System.out.println(cursor.next());

    }

这将返回以下内容:

{ "_id" : { "$oid" : "4f5a4477c5e80f71ece56797"} , "Name" : "Mozammil"}

但是,我只想要名称部分。在谷歌上搜索一下,这应该就行了

    DBCursor cursor = coll.find({}, {'Name':1});


    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }

但它不起作用。请帮忙


共 (4) 个答案

  1. # 1 楼答案

    要获取所有嵌套键,请执行以下操作:

        public static ArrayList<String> getKeys(Document it1) throws JSONException {
    
            ArrayList<String> result = new ArrayList<String>();
            ArrayList<String> resultTemp;
            String temp;
            Document doc;
            JSONArray jsa;
    
            int len, i;
            System.out.println(it1);
            String js = it1.toJson();
            JSONObject js1 = new JSONObject(js);
    
            Iterator<String> keys = js1.keys();
            while (keys.hasNext()) {
                String key = keys.next();
                if (key.equals("_id")) {
                    result.add(key);
                    continue;
                }
                System.out.println(key);
    
                temp = js1.get(key).toString();
                if (temp.contains(":")) {
                    jsa = new JSONArray(temp);
                    len = jsa.length();
                    for (i = 0; i < len; i++) {
                        JSONObject object = jsa.getJSONObject(i);
                        doc = Document.parse(object.toString());
                        System.out.println(doc);
                        resultTemp = getKeys(doc);
                        for (String keyTemp : resultTemp) {
                            if (!result.contains(key + "." + keyTemp))
                                result.add(key + "." + keyTemp);
                        }
                    }
                } else {
                    result.add(key);
                }
    
            }
            return result;
        }
    
  2. # 2 楼答案

    collection.find().projection(Projections.include("Name"))
    

    这个效果非常好

  3. # 3 楼答案

    可以通过光标在返回的文档上使用get来获取要查找的字段。像这样:

    System.out.println(cursor.next().get("key"));
    
  4. # 4 楼答案

    我知道你已经接受了答案,但这并不是你想要的

    以下是一些工作代码:

    // get Mongo set up...
    Mongo m = new Mongo();
    DB db = m.getDB( "test" );
    DBCollection coll = db.getCollection("test");
    
    // insert a test record
    coll.insert(new BasicDBObject("Name","Wes").append("x", "to have a second field"));
    
    // create an empty query
    BasicDBObject query = new BasicDBObject(); 
    // configure fields to be returned (true/1 or false/0 will work)
    // YOU MUST EXPLICITLY CONFIGURE _id TO NOT SHOW
    BasicDBObject fields = new BasicDBObject("Name",true).append("_id",false);
    
    // do a query without specifying fields (and print results)
    DBCursor curs = coll.find(query);
    while(curs.hasNext()) {
       DBObject o = curs.next();
       System.out.println(o.toString());
    }
    
    // do a query specifying the fields (and print results)
    curs = coll.find(query, fields);
    while(curs.hasNext()) {
       DBObject o = curs.next();
       System.out.println(o.toString());
    }
    

    第一个查询输出:

    { "_id" : { "$oid" : "4f5a6c1603647d34f921f967"} , "Name" : "Wes" , "x" : "to have a second field"}
    

    第二个查询输出:

    { "Name" : "Wes"}