2014-01-29 70 views
1

我蒙戈集合包含下列文件蒙戈和Java讀取嵌套文檔值

{ 

"syslog": [ 
    { 
     "alertId": "N/A", 
     "time": "06:46:57", 
     "device": "10.10.20.1" 
    }, 
    { 
     "alertId": "N/A", 
     "time": "06:47:30", 
     "device": "10.10.20.2" 
    } 
] 
} 

現在我想讀給設備的唯一值。

假設如果我設置設備=「10.10.20.2」這將只顯示"alertId": "N/A", "time": "06:47:30", "device": "10.10.20.2"爲了這個,我編寫Java代碼如下

BasicDBObject criteria = new BasicDBObject();          

criteria.put("syslog.device","10.10.20.2"); 
DBCursor cur = coll.find(criteria); 
while(cur.hasNext() && !isStopped()) { 
    String json = cur.next().toString(); 
}//end of while 

當我打印JSON它讓我整個的JSON值。我應該如何找到給定設備的選定值?

+0

你是什麼意思與'當我打印JSON它讓我整個JSON values'你應該作如下更新查詢? –

+0

不打印整個JSON,選擇你想要的字段,然後再將其轉換爲字符串 –

回答

3

您應該使用$elemMatch運算符來投影數組字段。

db.collection.find({"syslog.device" : "10.10.20.2"},{syslog : {$elemMatch : {device : "10.10.20.2"}}}) 

在Java:

BasicDBObject criteria = new BasicDBObject();          
criteria.put("syslog.device","10.10.20.2"); 

BasicDBObject elemMatchObj = new BasicDBObject(); 
elemMatchObj.put("$elemMatch", new BasicDBObject("device", "10.10.20.2")); 

DBCursor cur = coll.find(criteria, new BasicDBObject("syslog", elemMatchObj)); 
while(cur.hasNext() && !isStopped()) { 
    String json = cur.next().toString(); 
}//end of while 
+0

它工作正常:) – Yogesh