2010-10-20 46 views
1

這是我當前的查詢:使用Java + MongoDB的拋光的MongoDB查詢

{ 
    BasicDBObject select = new BasicDBObject(); 
    select.put("info.name.fn", 1); 

    DBCursor cursor = collection.find(new BasicDBObject(), select); 
    while (cursor.hasNext()) { 
     System.out.println(cursor.next()); 
    } 

它給出了一個輸出爲:

{ "_id" : { "$oid" : "123"} , "info" : { "name" : { "fn" : "foo"}}} 
{ "_id" : { "$oid" : "123"} , "info" : { "name" : { "fn" : "bar"}}} 
{ "_id" : { "$oid" : "123"} , "info" : { "name" : { "fn" : "baz"}}} 

_ids改變,以適應輸出。我的問題是,我給了什麼查詢來獲得輸出:

foo 
bar 
baz 

這是可能的嗎?或者每個查詢總是以上述格式返回它?我無法運行distinct(),因爲有重複的名稱。

謝謝。

+0

我也試過cursor.next.get(「info.name.fn」),但它返回null。 – theTuxRacer 2010-10-20 06:32:21

+0

我認爲你必須把它分解成三個獲取鏈。儘管對於Java API來說這是一個潛在的改進要求。也許在MongoDB郵件列表上詢問它。不過,有人已經想到了這一點,它可能被丟棄,因爲它在某個地方引起麻煩。 – Thilo 2010-10-20 06:36:06

+0

好吧,我會將它發佈在mongodb用戶GG上。謝謝。 – theTuxRacer 2010-10-20 06:39:30

回答

3

您可以得到的最小查詢結果就是您在上面顯示的結果。

不過你不必打印所有這些。

System.out.println(cursor.next().get("info").get("name").get("fn")); 
+0

是的,這工作。除了我不得不添加BasicBSONObject強制轉換兩次。現在它看起來像這樣: System.out.println((BasicBSONObject)((BasicBSONObject)cursor.next()。get(「info」))。get(「name」))。get(「fn」)) – theTuxRacer 2010-10-20 06:37:05

+0

哦。這個演員很醜陋。但我認爲你無能爲力。 – Thilo 2010-10-20 06:42:09

+0

是的。我會保持這個問題的答案只是稍微長一點,看看我是否可以掛鉤一些其他的答案。也將它張貼在mongodb用戶上。 – theTuxRacer 2010-10-20 06:43:05