2011-10-21 23 views
13

Soy nuevo en MongoDB y quiero insertar a MongoDB datos como este, pero no pude encontrar la maneraInsertar matriz dentro de un objeto en MongoDB

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

mi código es

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

    } 

ACTUALIZACIÓN: utilizando este código

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

almaceno cada imagen solo causan las etiquetas podrían ser así para el th misma imagen

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

} e,

Gracias

Respuesta

23

Básicamente se utiliza BasicDBObject para asignaciones de valores-clave y BasicDBList para objetos de matriz. Para el objeto de su pregunta, que haría esto:

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

Hay algunos métodos de conveniencia en la API para hacer esto un poco menos detallado.

El mapeo funciona así:

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

gracias, pero ¿puedes ver mi código después de la actualización usando tu código – Peril

+0

Tienes múltiples listas, así que escribirás un poco más de código que mi ejemplo. Cada lugar que tenga un [] tendrá un objeto BasicDBList por separado. Literalmente, mi código crearía {"image": "cab", "tags": [{"NNP": 0}, {"NN": 1}]}. Debe quedar claro cómo extrapolar de mi ejemplo. –

+0

es el {} indica que es un objeto? Quiero decir, si quiero datos como este 'tags = [{" NNP ": 0," NN ": 1}, {" NNP ": 3," NN ": 5} ...]' I los necesita en diferentes objetos? gracias de nuevo, voy a marcar esto como una respuesta porque realmente ayudó – Peril

3

Quizás quiso decir así?

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í, gracias, actualizado :) – Peril

0

Aquí es cómo lo uso cuando se utiliza mongo3.x:

Supongamos que desea que el resultado sea así: {"data": [{"key":"v1"}, {"key":"v1"}, {"key":"v1"}] }

[paso 1 ]: use Java Map para crear el objeto json que se asigna a los elementos dentro de la matriz; es decir, el interior {} []

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

[Paso 2]: utilizar la Lista de Java para agregar todos Mapa de Java en un solo elemento.

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

[Paso 3]: agregue lista Java en mongo

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

Cuestiones relacionadas