2013-04-01 42 views
7

我對MongoDB及其Java ... SDK非常新穎嗎? API?我有一個非常簡單的問題,但我一直未能找到滿意的答案。MongoDB/Java SDK:具有數組中值的查詢元素

比方說,我有一個像實例的集合:

{ 
    "_id": { 
     "$oid": "5156171e5d451c136236e738" 
    }, 
    "_types": [ 
     "Sample" 
    ], 
    "last_z": { 
     "$date": "2012-12-30T09:12:12.250Z" 
    }, 
    "last": { 
     "$date": "2012-12-30T04:12:12.250Z" 
    }, 
    "section": "5156171e5d451c136236e70f", 
    "s_mac": "AA:AA:AA:AA:AA:AA", 
    "_cls": "Sample", 
} 

而且我有一個硬編碼的Java名單:

static List<String> MAC_LIST = Arrays.asList("90:27:E4:0E:3D:D2", "A8:26:D9:E6:1D:8B"); 

我想知道的是如何查詢MongoDB所以它會給我的所有對象的s_mac字段的值出現在MAC_LIST列表中。

我猜我應該使用$in運算符,但我不知道如何將它轉換爲Java代碼。

任何提示或鏈接到網頁,並解釋通過Java SDK使用$in運營商,將不勝感激!

+0

嗯...... Java怎麼知道我想查找的字段實際上是「s_mac」? – BorrajaX

+1

錯過了一點:'collection.find(new BasicDBObject(「s_mac」,new BasicDBObject(「$ in」,MAC_LIST)));' – assylias

+0

不給我任何錯誤,但顯然得到的查詢沒有任何「下一個「(並且至少有2個int集合,包含數組中的s_mac),但我會繼續尋找......它看起來很有前途! :) – BorrajaX

回答

3

這裏是我(驅動程序版本2.10.1)的作品一個人爲的例子 - 你可以調整IP地址,並運行它是檢查,如果你得到了相同的結果:

public void gss() throws Exception{ 
    MongoClient mongo = new MongoClient("192.168.1.1"); 
    DB db = mongo.getDB("test"); 
    DBCollection collection = db.getCollection("stackoverflow"); 
    DBObject o1 = new BasicDBObject(); 
    o1.put("s_mac", "AA:AA:AA:AA:AA:AA"); 
    o1.put("_cls", "Sample1"); 
    DBObject o2 = new BasicDBObject(); 
    o2.put("s_mac", "90:27:E4:0E:3D:D2"); 
    o2.put("_cls", "Sample2"); 
    DBObject o3 = new BasicDBObject(); 
    o3.put("s_mac", "A8:26:D9:E6:1D:8B"); 
    o3.put("_cls", "Sample3"); 
    collection.insert(o1, o2, o3); 
    System.out.println(collection.find().count()); 
    List<String> MAC_LIST = Arrays.asList("90:27:E4:0E:3D:D2", "A8:26:D9:E6:1D:8B"); 
    System.out.println(collection.find(new BasicDBObject("s_mac", new BasicDBObject("$in", MAC_LIST))).count()); 
} 

它插入下列文件:

{ "_id" : ObjectId("5159ff98567e143bff0668e9"), 
    "s_mac" : "AA:AA:AA:AA:AA:AA", 
    "_cls" : "Sample1" 
} 
{ "_id" : ObjectId("5159ff98567e143bff0668ea"), 
    "s_mac" : "90:27:E4:0E:3D:D2", 
    "_cls" : "Sample2" 
} 
{ "_id" : ObjectId("5159ff98567e143bff0668eb"), 
    "s_mac" : "A8:26:D9:E6:1D:8B", 
    "_cls" : "Sample3" 
} 

的調用collection.find().count()回報3和collection.find(new BasicDBObject("s_mac", new BasicDBObject("$in", MAC_LIST))).count()回報2我想這是你所期望的一個電話。

+1

是的,實際上,你在評論中所說的話正在起作用。這是我的怪胎,它不會起作用!但這是一個非常好的答案。我相信它會幫助很多人(這是我第一次提出的問題之一,如... 20分鐘,這讓我相信很多人都在想)。再次感謝你!! :) – BorrajaX

相關問題