2011-10-21 119 views
13
對象

我在MongoDB的新的,我想插入到MongoDB的這樣的數據,但我無法弄清楚如何MongoDB中

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

我的代碼裏面插入陣列

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: 使用此代碼

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

我單獨存儲每個圖像會導致標籤可能是這樣的個Ë相同的圖像

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

},

感謝

回答

23

基本上你使用BasicDBObject作爲鍵值映射,而BasicDBList作爲數組對象。對於你的問題的對象,你可以這樣做:

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

有在API一些方便的方法,以使這個少一點冗長。

的映射是這樣的:

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

謝謝,但你能看見我的代碼更新後使用您的代碼 – Peril

+0

您有多個列表,所以你會寫比我的例子更多的代碼。每個地方你有一個[]你將有一個單獨的BasicDBList對象。從字面上看,我的代碼會創建{「image」:「cab」,「tags」:[{「NNP」:0},{「NN」:1}]}。應該清楚如何從我的例子中推斷出來。 –

+0

是{}表示這是一個對象嗎? 我的意思是,如果我想要像這樣的數據: 'tags = [{「NNP」:0,「NN」:1},{「NNP」:3,「NN」:5} ...]' 需要他們在不同的對象? 再次感謝,我將這標記爲一個答案,因爲它真的有幫助 – Peril

3

你的意思是這樣的嗎?

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

是的,謝謝,更新:) – Peril

0

下面是使用mongo3.x當我如何使用它:

假設你想要得到的結果是這樣的:{"data": [{"key":"v1"}, {"key":"v1"}, {"key":"v1"}] }

[第一步]:使用Java Map創建映射到數組內的元素的json對象;也就是說,{} []內

[第一步答]:Map m1,m2,m3 = new HashMap(); m1.put("key", "v1"); m2.put("key", "v1"); m3.put("key", "v1");

[第二步]:使用Java列表所有Java地圖添加到一個元素。

[第二步答]:List list = new ArrayList(); list.add(m1); list.add(m2); list.add(m3);

[第三步]:添加Java列表到蒙戈

[第三步答]:Document dc = new Document("key", list);