2015-02-23 60 views
0

屬性我有蒙戈的物體,像返回從MongoDB的對象 - Java驅動程序

{ 
     "name" : "mongo", 
     "values" : [ 
      { 
        "date" : "02-23-2015", 
        "price" : "5" 
      }, 
      { 
        "date" : "02-23-15", 
        "price" : "6" 
      }, 
      { 
        "date" : "02-22-15", 
        "price" : "7" 
      } 
    ] 
} 

我與Java驅動程序的工作,我能夠與像查詢提取該對象:

QueryBuilder builder = new QueryBuilder(); 
DBObject nameQuery = new BasicDBObject("name", "mongo"); 
builder.and(nameQuery); 
DBObject fullQuery = builder.get(); 

然而我想要的是提取所有的價格值,我想將它們存儲在一個數組中 - 現在我只能夠返回這個整個對象。像這樣的子集的引用在文檔中沒有很好地解釋,一個例子是有幫助。

任何幫助,將不勝感激。

編輯:好了,現在我可以通過這個數組中的對象進行迭代,但它並沒有利用蒙戈內置插件和自然會慢:

while (curs.hasNext()) 
    { 
     DBObject o = curs.next(); 
     BasicDBList values = (BasicDBList) o.get("values"); 
     BasicDBObject[] valuesArray = values.toArray(new BasicDBObject[0]); 
     for(BasicDBObject dbObj : valuesArray) { 
      name = dbObj.getString("name"); 
     } 
    } 

這讓我提取任何我想要的但我知道有一種更有效的方法。任何幫助將是巨大的,感謝

回答

0

,我認爲它應該工作,或者它可以攜帶您的解決方案的附近:

DB db = this.getConnection(); 
    DBCollection coll = db.getCollection(collection); 
    BasicDBObject searchQuery = new BasicDBObject(); 
    searchQuery.put("name", "mongo"); 

    cursor = coll.find(searchQuery); 

    DBObject resultElement = null; 
    List <String> prices = new ArrayList<String>(); 

    while(cursor.hasNext()){ 
      resultElement = cursor.next(); 
      prices.add ((String) resultElement.get("values.price")); 
    } 

希望它能幫助。

0

DBCollection.find()方法採用第二個參數,稱爲鍵,它允許您定義結果中應包含哪些字段。使用這樣的:

collection.find(query, new DBObject("values.price":1); 

這將返回一個文件只含有價格這樣的數值數組:

{ 
    "values" : [ 
     { 
       "price" : "5" 
     }, 
     { 
       "price" : "6" 
     }, 
     { 
       "price" : "7" 
     } 
] 
} 
+0

確定,但我如何去提取這些價值?我能夠通過投射到一個'BasicDBList'然後在'BasicDBList'對象上調用'toArray'方法來獲得這個數組...然後我只是迭代對象數組。有沒有內置的方式來做到這一點?上面看到我的更新 – user3979986 2015-02-23 22:13:26

+0

你的方法是關於我會怎樣做。我不確定你的意思是更加內置的方式,以及這種方式如何變慢 – Martin 2015-02-23 22:42:13

相關問題