2010-11-26 10 views
3

Ich benutze Java Treiber für mongoDB. Ich habe ein Dokument, das AlbumName, PreviewSize, ThumbSize, _id & Comments enthält. PreviewSize & ThumbSize sind Array. Ich möchte wissen, wie ich dieses Dokument abfragen und irgendeinen spezifischen Feldwert erhalten kann.Array-Positionen in MongoDB abfragen?

mehr klar zu sein, ist mein Dokument wie diese,

Document : { "AlbumName" : "Test" , "PreviewSize" : [ 
{ "ImageName" : "tom_and_jerry_guns.jpg" , "BinaryImage" : <Binary Data>} , 
{ "ImageName" : "Tom_and_Jerry,_Cartoons.jpg" , "BinaryImage" : <Binary Data>} , 
{ "ImageName" : "TomJerry2_468x342.jpg" , "BinaryImage" : <Binary Data>} , 
{ "ImageName" : "tom_and_jerry-5405.jpg" , "BinaryImage" : <Binary Data>}] , 

"ThumbSize" : [ { "ImageName" : "tom_and_jerry_guns.jpg" , "BinaryImage" : <Binary Data>} , 
{ "ImageName" : "Tom_and_Jerry,_Cartoons.jpg" , "BinaryImage" : <Binary Data>} , 
{ "ImageName" : "TomJerry2_468x342.jpg" , "BinaryImage" : <Binary Data>} , 
{ "ImageName" : "tom_and_jerry-5405.jpg" , "BinaryImage" : <Binary Data>}] , 

"_id" : { "$oid" : "4cef03b44613b5ba2d51a7b8"} , "comments" : [ ]} 

Wie soll ich die TomJerry2_468x342.jpg und seine <Binary Data> von PreviewSize bekommen.

Ich bin neu in mongoDB. Ich weiß nicht, ob es möglich ist oder nicht. Ich habe dieses Dokument erstellt und kann dieses Dokument mit neuen Bildern aktualisieren. Ich habe dies von this Präsentation gelernt.

Meine Frage, wie kann ich eine spezifische <Binary Data> bekommen, wenn ich seinen Namen habe?

Alle Vorschläge wären anerkennender!

Danke !!!

aktualisieren

Zum Beispiel: // Der Code habe ich versucht,

BasicDBObject query = new BasicDBObject(); 
BasicDBObject field = new BasicDBObject(); 
field.put("PreviewSize", 1); 
DBCursor cursor = coll.find(query, field); 
while(cursor.hasNext()){ 
    BasicDBObject result = (BasicDBObject) cursor.next(); 
    int i = result.size(); 
    System.out.println("Result Size: "+i); 
    System.out.println(result); 

    int i = result.size(); 
    String imageName = (String) ((BasicDBList)result.get("PreviewSize")).get("ImageName"); 
    System.out.println("Result Size: "+i+" Image Name :"+imageName); 
    byte[] imageByte = (byte[]) ((BasicDBList) result.get("PreviewSize")).get("BinaryImage"); 
    if(imageByte != null){System.out.println("Wow! Great!!! Its Coming!!!");} 
    else{System.out.println("Try Another Way!");} 
}// I am not sure this is exist(I am new to mongoDB). I need 
something like that. 
/* Some thing like the above list contains All contents of the 
"PreviewSize" data <ImageName> & <BinaryData>.*/ 

Zuerst habe ich mit versucht, durch (BasicDBObject) durch Gießen, aber ich gab mir einen Fehler wie den, cannot cast (BasicBSONList) to (BasicDBObject) Dann Ich änderte es zu (BasicBSONList)

Ich denke, dass ich falsch im Empfänger tue. Welchen Empfänger sollte ich benutzen !!!

habe ich versucht, die oben ein, und die Fehlermeldung, die ich in der Konsole bekam ist,

Console Display:

Result Size: 2 
{ "PreviewSize" : [ { "ImageName" : "tom_and_jerry_guns.jpg" , "BinaryImage" : <Binary Data>} , 

{ "ImageName" : "Tom_and_Jerry,_Cartoons.jpg" , "BinaryImage" : <Binary Data>} , 

{ "ImageName" : "TomJerry2_468x342.jpg" , "BinaryImage" : <Binary Data>} , 

{ "ImageName" : "tom_and_jerry-5405.jpg" , "BinaryImage" : <Binary Data>}] , 

"_id" : { "$oid" : "4cef03b44613b5ba2d51a7b8"}} 

"Exception in thread "main" java.lang.IllegalArgumentException: 
BasicBSONList can only work with numeric keys, not: [ImageName]" 

Ich bin völlig neu für mongoDB, wie 3 Tage alt :(.... Gib mir einen Weg aus !!!!

Und wissen, ich möchte auch ist es eine Möglichkeit, bestimmte Daten abzurufen, Wie, wenn ich das jede ImageName wissen kann ich seine 012.329 erhalten

+0

Warum antwortet mir niemand? Ist die Frage nicht verständlich? Es gibt auch keine Kommentare !! –

Antwort

4

Die Abfrage sollte so etwas wie:

db.albums.find({ "ThumbSize.ImageName" : "TomJerry2_468x342.jpg"})

, dass das Album-Dokument mit allen der binären Daten angezeigt werden können.

Sie können nicht nur dieses eine Stück zurückgeben. Sie können jedoch das "Thumbsize-Array" einfach wie folgt zurückgeben.

db.albums.find({ "ThumbSize.ImageName" : "TomJerry2_468x342.jpg"}, { "ThumbSize" : 1 })

Wenn Sie jedoch mehrere große Bilder haben, werden Sie bei GridFS aussehen wollen für diese Bilder zu speichern und dann ein machen.

+0

Ich suchte dies in Google für 3 Tage. An allen Orten kann ich die Anfragen sehen, die Sie gegeben haben. Ich benutze Java. Und ich bin ein Neuling. Gerade habe ich die Frage aktualisiert. Bitte schau es dir an !!! –

+1

Bitte werfen Sie einen Blick auf Ihre Fehlermeldung. Es passiert hier eindeutig: '(String) ((BasicDBList) result.get (" PreviewSize ")). Get (" ImageName ");'. Sie versuchen, '.get (" ImageName ")' auf einem List-Objekt aufzurufen. Das Objekt ist ein Array in JSON. Natürlich wollen Sie nicht "ImageName", Sie wollen etwas wie '.get (0) .get (" ImageName ")'. Es ist am besten, dass Sie die Fehlermeldung erneut lesen und verstehen. –

Verwandte Themen