2011-10-21 6 views
13

Je suis nouveau à MongoDB et je veux insérer les données MongoDB comme cela, mais je ne pouvais pas comprendre commenttableau Insérer l'intérieur d'un objet dans MongoDB

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

mon code est

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

    } 

MISE à JOUR: en utilisant ce code

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

je stocke chaque image seul ne cause les balises pourraient être comme ça pour e e même image

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

},

Merci

Répondre

23

Fondamentalement, vous utilisez BasicDBObject pour les mappages de valeurs-clés et BasicDBList pour les objets de tableau. Pour l'objet dans votre question, vous feriez ceci:

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

Il y a quelques méthodes pratiques dans le api pour en faire un peu moins bavard.

Le mapping fonctionne comme ceci:

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

merci, mais pouvez-vous voir mon code après la mise à jour en utilisant votre code – Peril

+0

Vous avez plusieurs listes donc vous allez écrire un peu plus de code que mon exemple. Chaque endroit où vous avez un [], vous aurez un objet BasicDBList séparé. Littéralement, mon code créerait {"image": "cab", "tags": [{"NNP": 0}, {"NN": 1}]}. Il devrait être clair comment extrapoler à partir de mon exemple. –

+0

est le {} indique que c'est un objet? Je veux dire, si je veux les données comme ceci 'tags = [{" NNP ": 0," NN ": 1}, {" NNP ": 3," NN ": 5} ...]' I besoin d'eux dans différents objets? merci encore, je signalerai cela comme une réponse parce que cela m'a vraiment aidé – Peril

3

Vouliez-vous dire comme ça?

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

oui, merci, mis à jour :) – Peril

0

Voici comment je l'utilise lors de l'utilisation mongo3.x:

Supposons que vous voulez que le résultat soit comme ceci: {"data": [{"key":"v1"}, {"key":"v1"}, {"key":"v1"}] }

[Etape 1 ]: utilisez Java Map pour créer un objet json qui correspond aux éléments à l'intérieur du tableau; à savoir la {} à l'intérieur []

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

[Etape 2]: utiliser Java liste pour ajouter toutes Java carte en un seul élément.

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

[Etape 3]: ajouter la liste Java dans mongo

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

Questions connexes