2011-10-21 35 views
13

Tôi mới tại MongoDB và tôi muốn chèn để MongoDB dữ liệu như thế này nhưng tôi không thể tìm ra cáchChèn Mảng bên trong một đối tượng trong MongoDB

{ 
    image = "cab" 
    tags = [ 
      [ "NNP", 0 ], 
      [ "NN", 1 ] 
     ] 
}, 
{ 
    image = "castle" 
    tags = [ 
      [ "NNP", 2 ], 
      [ "NN", 1 ], 
     ] 
} 

mã của tôi là

BasicDBObject obj = new BasicDBObject(); 
    obj.put("images", ....); 
    for(Tag tag:tags){ 
    BasicDBObject tagsObj = new BasicDBObject(); 
    tagsObj.put("NNP",tag.getNNP()); 
    tagsObj.put("NN",tag.getNN()); 
    obj.put("tags",tagsObj); 

    } 

UPDATE: sử dụng mã này

Mongo m = new Mongo(); 
DB db = m.getDB("test"); 
DBCollection coll = db.getCollection("tags"); 
for(Tag tag:tags){ 
    BasicDBList dbl = new BasicDBList(); 
    dbl.add(new BasicDBObject("NNP",tag.getNNP())); 
    dbl.add(new BasicDBObject("NN", tag.getNNP())); 
    BasicDBObject outer=new BasicDBObject("images", currentImageName).append("tags", dbl); 
    coll.insert(outer); 
       } 

tôi lưu trữ tất cả các hình ảnh một mình gây ra các thẻ có thể là như thế này cho th e cùng hình ảnh

{ 
     image = "cab", 
     tags = [ 
       { "NNP", 0 }, 
       { "NN", 1 } 
      ], 
      [ {"NNP", 4 }, 
       { "NN", 5 } 
      ], 
      [ 
       {"NNP", 0 }, 
       { "NN", 4 } 
      ] 

},

Cảm ơn

Trả lời

23

Về cơ bản bạn sử dụng BasicDBObject cho ánh xạ khóa-giá trị và BasicDBList cho các đối tượng mảng. Đối với đối tượng trong câu hỏi của bạn, bạn sẽ làm điều này:

BasicDBList dbl = new BasicDBList(); 
dbl.add(new BasicDBObject("NNP",0)); 
dbl.add(new BasicDBObject("NN", 1)); 
BasicDBOBject outer=new BasicDBObject("image", "cab").append("tags", dbl); 

Có một số phương pháp tiện lợi trong api để thực hiện điều này một chút tiết.

Việc lập bản đồ các công trình như thế này:

for: {"A":1} use: new BasicDBObject("A",1) 
for: {"A":1, "B":2} use: new BasicDBObject("A",1).append("B",2) 
for: {"A":{"B":2}} use: new BasicDBObject("A",new BasicDBObject("B",2)) 
for: {"A":["B","C"]} use: 
     BasicDBList dbl = new BasicDBList(); 
     dbl.add("B"); 
     dbl.add("C"); 
     -> new BasicDBObject("A",dbl); 
+0

cảm ơn, nhưng có thể bạn nhìn thấy mã của tôi sau khi cập nhật sử dụng mã của bạn – Peril

+0

Bạn có nhiều danh sách, do đó bạn sẽ viết mã nhiều hơn một chút so với ví dụ của tôi. Mỗi nơi bạn có một [] bạn sẽ có một đối tượng BasicDBList riêng biệt. Theo nghĩa đen, mã của tôi sẽ tạo {"image": "cab", "tags": [{"NNP": 0}, {"NN": 1}]}. Nó phải được rõ ràng như thế nào để ngoại suy từ ví dụ của tôi. –

+0

là {} cho biết đây là một đối tượng? Ý tôi là, nếu tôi muốn dữ liệu như thế này 'tags = [{" NNP ": 0," NN ": 1}, {" NNP ": 3," NN ": 5} ...]' I cần chúng trong các đối tượng khác nhau? cảm ơn một lần nữa, tôi sẽ gắn cờ đây là câu trả lời vì nó thực sự đã giúp – Peril

3

Ý của bạn là như thế này?

BasicDBObject obj = new BasicDBObject(); 
    obj.put("image", ....); 
    for(Tag tag:tags){ 
     BasicDBObject tagsObj = new BasicDBObject(); 
     tagsObj.put("NNP",tag.getNNP()); 
     tagsObj.put("NN",tag.getNN()); 
     obj.put("tags",tagsObj); 
    } 
+0

vâng, cảm ơn, cập nhật :) – Peril

0

Sau đây là cách tôi sử dụng nó khi sử dụng mongo3.x:

giả sử bạn muốn kết quả là như thế này: {"data": [{"key":"v1"}, {"key":"v1"}, {"key":"v1"}] }

[bước 1 ]: sử dụng Java Map để tạo đối tượng json ánh xạ tới các phần tử bên trong mảng; đó là, {} bên trong []

[bước 1 Ans]: Map m1,m2,m3 = new HashMap(); m1.put("key", "v1"); m2.put("key", "v1"); m3.put("key", "v1");

[Bước 2]: sử dụng Java Danh sách để thêm tất cả Java Bản đồ thành một phần tử.

[Bước 2 Ans]: List list = new ArrayList(); list.add(m1); list.add(m2); list.add(m3);

[step3]: thêm danh sách Java vào Mongo

[step3 Ans]: Document dc = new Document("key", list);

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