2013-04-01 39 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

相关问题