2012-12-20 64 views
1

我有一個這樣的結構在我的數據庫:Java的MongoDB的查詢

{ 
    { 
    "document_id" : 35, 
    "transport" : ["car", "plane", "train", "boat"] 
    }, 

    { 
    "document_id" : 36, 
    "transport" : ["car", "bike", "train"] 
    } 
} 

我怎麼會做一個搜索查詢找到與例如運輸「平面」的文件/記錄?

感謝您的任何幫助。

史蒂芬

回答

3

從MongoShell

db.find({transport:"plane"})會做。

如果值是數組,MongoDB將搜索整個數組以匹配查詢。

使用Java驅動程序。

你要跟第一個獲得蒙戈集合

List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); 
BasicDBObject dbo = new BasicDBObject(); 
dbo.append("transport", "plane"); 
DBCursor cur = collection.find(dbo); 
while (cur.hasNext()) { 
      list.add(JSONHelper.toJSON(cur.next().toMap())); 
     } 
3

搜索包含一個元素的數組,你可以檢查對數組元素。

所以,只要使用: -

db.collection.find({transport:"plane"}) 

會給你想要的東西。

以下是一個Java的實現: -

BasicDBObject doc = new BasicDBObject("document_id", 35) 
          .append("transport", new String[] {"car", "plane"}); 

BasicDBObject doc2 = new BasicDBObject("document_id", 36) 
          .append("transport", new String[] {"car"}); 

coll.insert(doc); 
coll.insert(doc2); 

DBObject query = new BasicDBObject("transport", "plane"); 
DBCursor cursor = coll.find(query, new BasicDBObject("_id", 0)); 

while (cursor.hasNext()) { 
    System.out.println(cursor.next()); 
} 

輸出: -

{ "document_id" : 35 , "transport" : [ "car" , "plane"]} 
0
@Document(collection = "document") 
public class Transport { 


private ObjectId document_id; 

private ArrayList transport; 



} 


// 

   List<String> list = new ArrayList<String>(); 
        list.add("car"); 
        list.add("plane"); 
    list.add("train"); 
        list.add("boat"); 

Transport transport; 

transport.setTransport(list);