查询MongoDB集合中的字段。

时间:2012-03-09 18:38:23

标签: java mongodb

我正在尝试查询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"}

但是,我只想要Name部分。谷歌搜索,这应该做的工作。

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


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

但它不起作用。请帮忙?

7 个答案:

答案 0 :(得分:9)

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

System.out.println(cursor.next().get("key"));

答案 1 :(得分:9)

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

以下是一些有效的代码:

// 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"}

答案 2 :(得分:6)

查看DBCollection.find

BasicDBObject query = new BasicDBObject(); // because you have no conditions
BasicDBObject fields = new BasicDBObject("Name",1);
coll.find(query, fields);

答案 3 :(得分:1)

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

这样做得很好!!!

答案 4 :(得分:0)

BasicDBObject query = new BasicDBObject();

BasicDBObject fields = new BasicDBObject();
fields.put("name", 1);

DBCursor cursor = collection.find(query, fields);
while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

答案 5 :(得分:0)

要获取所有嵌套键:

    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;
    }

答案 6 :(得分:0)

 db.getCollection('users').aggregate([
   {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
   {"$unwind":"$arrayofkeyvalue"},
   {"$group":{"_id":null,"columns":{"$addToSet":"$arrayofkeyvalue.k"}}}
 ]) 

使用上面的查询,它将为您提供文档的所有字段。在此您还将获得嵌套字段。