2017-10-12 72 views
0

我在使用Java代碼在mongo數據庫中迭代文檔時遇到了一個問題。我在集合中將User_ID值作爲「demo」迭代記錄。迭代時它存儲最新的記錄,而不是所有匹配的數據。代碼如下:在Mongo中使用遊標對多個文檔進行迭代

public BasicDBObject Demo1(String User_ID) throws Exception { 
     DB db = ConnectToDB.getConnection(); 
     DBCollection collection = db.getCollection("demo"); 
     BasicDBObject document = new BasicDBObject(); 
     BasicDBObject Project_Detail = new BasicDBObject(); 
     document.put("User_ID", User_ID); 
     field.put("ProjectName", 1); 
     field.put("ProjectNumber", 1); 
     field.put("_id", 0); 
     DBCursor cursor = collection.find(document, field); 
while (cursor.hasNext()) { 
        BasicDBObject object=new BasicDBObject(); 
        object = (BasicDBObject) cursor.next(); 

        Project_Detail.append("ProjectName", object.get("ProjectName")); 
        Project_Detail.append("ProjectNumber", object.get("ProjectNumber")); 
        System.out.println("Project_Detail value is:" + Project_Detail); 

       } 
return Project_Detail; 
} 

我蒙戈收集如下,這是一種有兩個文件:

{ 
    "_id" : ObjectId("59dc85905f0446bfb39417f5"), 
    "User_ID" : "demo", 
    "ProjectNumber" : "1", 
    "ProjectName" : "Project1", 
}, 
{ 
    "_id" : ObjectId("59dc85a15f0446bfb39417f9"), 
    "User_ID" : "demo", 
    "ProjectNumber" : "2", 
    "ProjectName" : "Project2", 
} 

當我運行上面的代碼,它顯示給定USER_ID以下結果:「演示「:

{ 
    "ProjectName": "Project2", 
    "ProjectNumber": "2"} 

但理想的結果應該是:

{ 
    "ProjectName": "Project1", 
    "ProjectNumber": "1"}, 
{ 
    "ProjectName": "Project2", 
    "ProjectNumber": "2"} 

它似乎是更新第二個計數器中的記錄,因此在第二次迭代中更新第二個文檔中的值。請指定是否可以獲取匹配記錄並將其存儲在結果中。謝謝你的幫助。

回答

1

在第二次迭代中,您正在替換同一個鍵的值。這就是爲什麼只有一個值仍然存在。 您應該使用BasicDBList存儲多個BasicDBObject

E.g

BasicDBList Project_Detail = new BasicDBList(); 
while (cursor.hasNext()) { 
        BasicDBObject object=new BasicDBObject(); 
        object = (BasicDBObject) cursor.next(); 
        BasicDBObject temp = new BasicDBObject(); 
        temp.append("ProjectName", object.get("ProjectName")); 
        temp.append("ProjectNumber", object.get("ProjectNumber")); 
        Project_Detail.add(temp); 

       } 

轉換BasicDBListBasicDBObject

BasicDBObject result = new BasicDBObject(); 
    result.putAll(Project_Detail.toMap()); 
+0

的感謝!它的工作正常。如果有解決方案,我們可以將BasicDBList對象'Project_Detail'轉換爲BasicDBObject作爲返回類型嗎?我可以使用BasicDBList作爲返回類型,但以某種方式使用其他方案將結果作爲BasicDBObject返回。 –

+0

請參閱BasicDBList是一個數組,如果您將列表轉換爲對象,那麼對於每個對象,您需要一個鍵 –

+0

好吧,謝謝。 –