MongoDB / Java SDK:使用数组中的值查询元素
我对MongoDB及其Java ... SDK非常新颖? API? 我有一个非常简单的问题,但我一直未能找到满意的答案。
假设我有一个如下所示的实例集合:
{
"_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
列表中的MAC_LIST
。
我猜我应该使用$ in操作符,但我不知道如何将其转换为Java代码。
任何提示或链接到页面,并解释通过Java SDK使用$in
操作符将不胜感激!
这里是一个适合我的人为的例子(驱动程序版本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,我认为是你所期望的。
上一篇: MongoDB/Java SDK: Query elements with a value in array
下一篇: CSS rule to disable highlighting table column upon selection