2013-04-01 55 views
7

Tôi rất mới với MongoDB và Java ... SDK của nó? Api? Tôi có một câu hỏi rất đơn giản, nhưng tôi đã không thể tìm ra câu trả lời thỏa đáng.MongoDB/Java SDK: Các phần tử truy vấn có giá trị trong mảng

Hãy nói rằng tôi có một tập hợp các trường hợp được như:

{ 
    "_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", 
} 

Và tôi có một mã hóa cứng danh sách Java:

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

Những gì tôi muốn biết là làm thế nào để truy vấn MongoDB vì vậy nó sẽ cho tôi tất cả các đối tượng có trường s_mac có giá trị xuất hiện trong Danh sách MAC_LIST.

Tôi đoán tôi nên sử dụng toán tử $in, nhưng tôi không biết cách dịch nó sang mã Java.

Bất kỳ gợi ý hoặc liên kết nào đến các trang có giải thích về việc sử dụng toán tử $in thông qua SDK Java sẽ được đánh giá cao!

+0

Mmmm ... Java sẽ biết rằng trường tôi muốn tìm kiếm thực sự là "s_mac" như thế nào? – BorrajaX

+1

Thiếu một chút: 'collection.find (new BasicDBObject (" s_mac ", new BasicDBObject (" $ in ", MAC_LIST));' – assylias

+0

Không cho tôi bất kỳ lỗi nào, nhưng dường như truy vấn kết quả không có bất kỳ " tiếp theo "(và có ít nhất 2 trường hợp int ông bộ sưu tập với một s_mac chứa trong mảng, mặc dù) ... Tôi sẽ tiếp tục tìm kiếm ... Có vẻ đầy hứa hẹn! :) – BorrajaX

Trả lời

3

Dưới đây là một ví dụ giả tạo mà làm việc cho tôi (trình điều khiển phiên bản 2.10.1) - bạn có thể điều chỉnh địa chỉ IP và chạy nó như là để kiểm tra xem bạn có được kết quả tương tự:

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()); 
} 

Nó chèn các tài liệu sau:

{ "_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" 
} 

một cuộc gọi đến collection.find().count() lợi nhuận 3 và một cuộc gọi đến collection.find(new BasicDBObject("s_mac", new BasicDBObject("$in", MAC_LIST))).count() returns 2 mà tôi nghĩ là những gì bạn mong đợi.

+1

Đúng vậy, thực sự, những gì bạn nói trong bình luận của bạn đang hoạt động. Đó là lỗi của tôi, nó sẽ không hoạt động! Nhưng đây là một câu trả lời rất hay. Tôi chắc chắn nó sẽ giúp nhiều người (là lần đầu tiên một trong những câu hỏi của tôi nhận được 3 upvotes trong như ... 20 phút, mà làm cho tôi tin rằng nhiều người đã tự hỏi như vậy). Cám ơn bạn một lần nữa!! :) – BorrajaX

Các vấn đề liên quan