Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB集合中的查询字段。_Java_Mongodb - Fatal编程技术网

Java MongoDB集合中的查询字段。

Java MongoDB集合中的查询字段。,java,mongodb,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"); c

我试图查询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());
    }

但它不起作用。请帮忙

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

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


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

以下是一些工作代码:

// 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"}
第二个查询输出:

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

这个效果很好

要获取所有嵌套键:

    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;
    }
publicstaticarraylistgetkeys(文档it1)抛出JSONException{
ArrayList结果=新建ArrayList();
arraylistresulttemp;
字符串温度;
文件文件;
JSONArray jsa;
内伦,我;
系统输出打印项次(it1);
字符串js=it1.toJson();
JSONObject js1=新的JSONObject(js);
迭代器keys=js1.keys();
while(keys.hasNext()){
String key=keys.next();
if(key.equals(“_id”)){
结果。添加(键);
继续;
}
系统输出打印项次(键);
temp=js1.get(key.toString();
如果(临时包含(“:”){
jsa=新JSONArray(临时);
len=jsa.length();
对于(i=0;i

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

您应该改为修改打印。与其从
cursor.next()
中转储整行,不如将其放入
JSONObject
中,然后使用JSONObject方法只打印所需的字段。实际上,查询本身存在另一个问题。我的意思是只使用第一个find(),然后只解析打印循环中的name字段。哦,添加逗号而不是冒号:(很抱歉,它不起作用。它仍然输出{“\u id”:{“$oid”:“4F5A39B0C5E8BF828432CB4”},“Name”:“Mozammil”}这就成功了:System.out.println(cursor.next().get(“Name”);我给出的语法只会给出请求的字段和_id(mongo shell版本“:”的ofc除外)-无效java)。cursor.next().get(key)检索整个对象,然后手动提取。这可能会将整个文档传输到客户端,根据文档大小,这可能会很昂贵。如何使用此方法从同一对象打印多个键?虽然此代码段可能解决了问题,但确实有助于提高质量请记住,你是在为将来的读者回答这个问题,而这些人可能不知道你的代码建议的原因。请编辑更多信息。不鼓励只使用代码和“尝试此”回答,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试此”.我们在这里努力成为知识的来源。好吧。也许你是对的,但一开始我认为如果我提供更多关于它的信息,那么答案就没有意义了。知识很重要,但一颗探索的心更有价值
    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;
    }
 db.getCollection('users').aggregate([
   {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
   {"$unwind":"$arrayofkeyvalue"},
   {"$group":{"_id":null,"columns":{"$addToSet":"$arrayofkeyvalue.k"}}}
 ])