2011-10-21 11 views
13

Sono un MongoDB e voglio inserire per MongoDB di dati di questo tipo, ma non riuscivo a capire comeInserire Array all'interno di un oggetto in MongoDB

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

il mio codice è

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: utilizzando questo codice

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

i memorizzare ogni immagine da solo causare i tag potrebbero essere così per th e stessa immagine

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

},

Grazie

risposta

23

Fondamentalmente si utilizza BasicDBObject per i mapping di valori-chiave e BasicDBList per gli oggetti array. Per l'oggetto nella sua interrogazione, faresti questo:

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

Ci sono alcuni metodi di convenienza nella API per rendere questo un po 'meno prolisso.

La mappatura funziona così:

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

grazie, ma si può vedere il mio codice dopo l'aggiornamento usando il tuo codice – Peril

+0

Hai più elenchi in modo da scrivere un po 'di codice in più del mio esempio. In ogni posto in cui hai un [] avrai un oggetto BasicDBList separato. Letteralmente il mio codice creerebbe {"image": "cab", "tags": [{"NNP": 0}, {"NN": 1}]}. Dovrebbe essere chiaro come estrapolare dal mio esempio. –

+0

è il {} indica che questo è un oggetto? Voglio dire, se voglio i dati come questo 'tag = [{" NNP ": 0," NN ": 1}, {" NNP ": 3," NN ": 5} ...]' I bisogno di loro in diversi oggetti? grazie ancora, lo contrassegnerò come risposta perché ha davvero aiutato – Peril

3

Forse cercavi come questo?

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

sì, grazie, aggiornato :) – Peril

0

Ecco come lo uso quando si utilizza mongo3.x:

supponiamo si desidera che il risultato sia simile a questo: {"data": [{"key":"v1"}, {"key":"v1"}, {"key":"v1"}] }

[step1 ]: usa Java Map per creare oggetti json che mappano gli elementi all'interno dell'array; cioè il {} all'interno []

[step1 Ans]: Map m1,m2,m3 = new HashMap(); m1.put("key", "v1"); m2.put("key", "v1"); m3.put("key", "v1");

[Fase 2]: usare List Java per aggiungere tutti Java Map in un solo elemento.

[Step2 Ans]: List list = new ArrayList(); list.add(m1); list.add(m2); list.add(m3);

[Fase 3]: aggiungere all'elenco Java in mongo

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

Problemi correlati