2017-10-16 73 views
1

我想從mongo子文檔中找到特定的字段值,但是它檢索全數據或空值。我正在使用mongo 3.0.1驅動程序。 mongo特定驅動程序的語法有沒有問題?
JSON數據是:如何從mongo中的子文檔獲取特定值

{ 
     "Demo": { 
      "Demo Data": { 
       "Building": { 
        "A": 1, 
        "B": 2, 
        "C": 3, 
        "D": 4, 

       }, 
       "Mode": "Building" 
      } 
     } 
    } 

的代碼如下:

DBCollection collection = db.getCollection("demo"); 
        BasicDBObject field = new BasicDBObject(); 
        BasicDBObject document = new BasicDBObject(); 
        field1.put("_id", 0); 
        field1.put("Demo", 1); 
        DBCursor cursor = collection.find(document, field); 
        BasicDBObject object = new BasicDBObject(); 
        BasicDBObject Mode = new BasicDBObject(); 
        while (cursor.hasNext()) { 
         object = (BasicDBObject) cursor.next(); 
         Mode.put("Mode", object.get(Mode)); 
         System.out.println("Mode value is"+Mode); 

        } 

,但使用上面的代碼中,輸出作爲表示:

Mode value is {"Mode":null} 

要求是獲得下面的輸出: {"Mode": "Building"}

請指明條件出錯的地方。謝謝你的幫助。

+0

正在使用哪個版本的Mongo Java驅動程序? –

+0

@ CS_noob:我正在使用版本mongo-3.0.1 java驅動 –

回答

0

我認爲你錯誤地認爲,因爲你已經把field1.put("Demo", 1);,它會返回你內在的文件,而不管它會一直返回你完整的文件,它會做的是省略其他領域,但即使這樣,它會是完整的文檔,從根本上是正確的。

while (cursor.hasNext()) { 
    object = (BasicDBObject) cursor.next(); 
    Map map = object.toMap(); 
    Mode.put("Mode", map.get("Demo").get("Demo Data").get("Mode")); //pre-check for NPE 
    System.out.println("Mode value is"+Mode); 
} 
+0

好的謝謝,但我想知道是否有任何方法在mongo中搜索特定的子文檔在一個調用/方法沒有嵌套get方法? –

+0

mongo驅動程序將總是返回完整的文檔,如果你的意思是在不改變它的地圖的情況下得到它,我認爲你將不得不嘗試一些命中和試驗也許object.get(「Demo.Demo Data.Mode」),但是我懷疑它,因爲這是特定於駕駛員執行。 –

相關問題