MongoDB/Java SDK:查询数组中有值的元素

MongoDB/Java SDK:查询数组中有值的元素,java,list,mongodb,Java,List,Mongodb,我对MongoDB及其Java非常陌生。。。SDK?应用程序编程接口?我有一个非常简单的问题,但我还没有找到一个满意的答案 假设我有一组实例,如下所示: { "_id": { "$oid": "5156171e5d451c136236e738" }, "_types": [ "Sample" ], "last_z": { "$date": "2012-12-30T09:12:12.250Z" },

我对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");
static List MAC_List=Arrays.asList(“90:27:E4:0E:3D:D2”,“A8:26:D9:E6:1D:8B”);
我想知道的是如何查询MongoDB,以便它将为我提供其
s_mac
字段具有出现在
mac_列表中的值的所有对象

我猜我应该使用操作符,但我不知道如何将其转换为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());
}

调用
collection.find().count()
返回3,调用
collection.find(newbasicdbobject(“s_mac”,newbasicdbobject(“$in”,mac_LIST)))。count()返回2,我认为这是您期望的结果。

Mmmm。。。Java怎么知道我要查找的字段实际上是“s_mac”?遗漏了一点:
collection.find(newBasicDBObject(“s_mac”,newBasicDBObject(“$in”,mac_LIST))
没有给我任何错误,但是很明显,结果查询没有任何“next”(尽管数组中包含至少2个实例,其中包含一个s_mac)。。。我会继续找。。。看起来很有希望!:)我刚刚尝试了一个类似的例子,结果正如预期的那样——不知道为什么你没有得到任何回报。您可以尝试在shell中查看得到的结果:
db.yourcollection.find({s_mac:{$in:[“90:27:E4…”,“A8:26…”})
。还请注意,您可以对find的结果使用for-each循环:
Iterable result=collection.find();对于(dbo:result){…}
是的,通过mongo终端,我得到了3个项目,它们的s_mac在数组中
>db.getCollection(“myCollection”)。查找({s_mac:{$in:[“90:27:E4:0E:3D:D2”,“A8:26:D9:E6:1D:8B”]}。)count 3
是的,实际上,你在评论中所说的是有效的。这是我的错,它不起作用!但这是一个非常好的答案。我相信这会帮助很多人(这是我的一个问题第一次在20分钟内获得3票赞成票,这让我相信很多人也有同样的想法)。再次感谢!!:)
{ "_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"
}