Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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,我有一个示例文档,如: { "_id":{ "$oid":"5db183192bc7c53f24c6b1b4" }, "name":"Jack", "addresses":[ { "type":1.0, "street":"123 My Street", "city":"Bedford Falls", "state":"NJ" }, {

我有一个示例文档,如:

{ 
   "_id":{ 
      "$oid":"5db183192bc7c53f24c6b1b4"
   },
   "name":"Jack",
   "addresses":[ 
      { 
         "type":1.0,
         "street":"123 My Street",
         "city":"Bedford Falls",
         "state":"NJ"
      },
      { 
         "type":2.0,
         "street":"456 My Street",
         "city":"Bedford Falls",
         "state":"NJ"
      },
      { 
         "type":3.0,
         "street":"789 My Street",
         "city":"Bedford Falls",
         "state":"NJ"
      }
   ]
}.
现在我想检索键的值(类型、街道、名称)。如何使用Java实现这一点

我将得到数组中的键及其值,但不是之后

package utils;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.bson.BSONObject;
import org.bson.Document;
import org.bson.types.ObjectId;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class TestClass extends MongoConnector{
    public static MongoClient mongoClient = null;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestClass demo =new TestClass();
        mongoClient = demo.createConnection("*********", "******", "******", "*****", "*****");
        DB databaseName =mongoClient.getDB("sampledata");
        DBCollection coll = databaseName.getCollection("Mule");
        String[] keyNames = {"name","type","street"};
        ObjectId id= new ObjectId("4fce8cca5a37d2376c78017f");
                BasicDBObject query = new BasicDBObject();
                query.put("_id",id);
                DBCursor cursor = coll.find();
                ArrayList arr = new ArrayList();
                String str;
                while (cursor.hasNext()) {
                    System.out.println(cursor.next());
                    for (String key : keyNames) {
                        str=cursor.curr().get(key).toString();
                        arr.add(key+":"+str);
                    }
                }
        System.out.println(arr);
            mongoClient.close();
    }
}
我希望仅将值和键作为列表获取,但当给定类型时,它会抛出空指针异常。有人能帮忙吗

您正在使用嵌套文档数组的文档。您需要获取“地址”,然后在该数组中存在的文档中进行迭代

检查文件

DB databaseName=client.getDB(“sampledata”);
DBCollection coll=databaseName.getCollection(“Mule”);
字符串[]keyRootNames={“name”};
ObjectId=new ObjectId(“4fce8cca5a37d2376c78017f”);
BasicDBObject查询=新建BasicDBObject();
查询.放置(“\u id”,id);
DBCursor cursor=coll.find();
ArrayList arr=新的ArrayList();
字符串str;
while(cursor.hasNext()){
System.out.println(cursor.next());
for(字符串键:keyRootNames){
str=cursor.curr().get(key.toString();
arr.add(键+“:”+str);
}
if(null!=cursor.curr().get(“地址”)){
BasicDBList地址=(BasicDBList)cursor.curr().get(“地址”);
对于(int i=0;i
Rivu

您正在使用嵌套文档数组的文档。您需要获取“地址”,然后在该数组中存在的文档中进行迭代

检查文件

DB databaseName=client.getDB(“sampledata”);
DBCollection coll=databaseName.getCollection(“Mule”);
字符串[]keyRootNames={“name”};
ObjectId=new ObjectId(“4fce8cca5a37d2376c78017f”);
BasicDBObject查询=新建BasicDBObject();
查询.放置(“\u id”,id);
DBCursor cursor=coll.find();
ArrayList arr=新的ArrayList();
字符串str;
while(cursor.hasNext()){
System.out.println(cursor.next());
for(字符串键:keyRootNames){
str=cursor.curr().get(key.toString();
arr.add(键+“:”+str);
}
if(null!=cursor.curr().get(“地址”)){
BasicDBList地址=(BasicDBList)cursor.curr().get(“地址”);
对于(int i=0;i
        DB databaseName =client.getDB("sampledata");
        DBCollection coll = databaseName.getCollection("Mule");
        String[] keyRootNames = {"name"};
        ObjectId id= new ObjectId("4fce8cca5a37d2376c78017f");
        BasicDBObject query = new BasicDBObject();
        query.put("_id",id);
        DBCursor cursor = coll.find();
        ArrayList arr = new ArrayList();
        String str;
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
            for (String key : keyRootNames) {
                str=cursor.curr().get(key).toString();
                arr.add(key+":"+str);
            }
            if(null != cursor.curr().get("addresses")){
                BasicDBList addresses = (BasicDBList) cursor.curr().get("addresses");
                for (int i = 0; i < addresses.size() ; i++){
                    BasicDBObject nestedDocument = (BasicDBObject) addresses.get(i);
                    arr.add(String.format("%s:%s", "type", nestedDocument.get("type")));
                    arr.add(String.format("%s:%s", "street", nestedDocument.get("street")));
                }
            }
        }
        System.out.println(arr);