7

私は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 コードに変換する方法がわかりません。

$inJava SDK を介した演算子の使用に関する説明を含むページへのヒントまたはリンクをいただければ幸いです。

4

1 に答える 1

4

これは私にとってうまくいく不自然な例です(ドライバーバージョン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()return 3 への呼び出しとreturn collection.find(new BasicDBObject("s_mac", new BasicDBObject("$in", MAC_LIST))).count()2 への呼び出しは、あなたが期待したものだと思います。

于 2013-04-01T21:45:58.973 に答える