Запрашивать позиции массива в MongoDB? - PullRequest
3 голосов
/ 26 ноября 2010

Я использую драйвер Java для mongoDB.У меня есть документ, который содержит AlbumName, PreviewSize, ThumbSize, _id & Comments.PreviewSize & ThumbSize - массив.Я хочу знать, как я могу запросить этот документ и получить любое конкретное значение массива.

Чтобы быть более понятным, мой документ выглядит так:

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" : [ ]}

Как мне получить TomJerry2_468x342.jpg и <Binary Data> из PreviewSize.

Я новичок в mongoDB.Я не знаю, возможно ли это или нет.Я только что создал этот документ, и я могу обновить этот документ с новыми изображениями.Я узнал об этом из этой презентации.

Мой вопрос, как я могу получить какой-то конкретный <Binary Data>, когда у меня есть его имя?

Любые предложения будут более благодарными!

Спасибо !!!

Обновление

Например: // Код, который я пробовал,

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>.*/ 

ПервыйЯ попытался с помощью приведения (BasicDBObject), но я дал мне ошибку вроде cannot cast (BasicBSONList) to (BasicDBObject) Затем я изменил ее на (BasicBSONList)

Я думаю, что я делаю неправильно в приемнике.Какой приемник я должен использовать !!! ???

Я попробовал описанный выше, и сообщение об ошибке, которое я получил в консоли:

Дисплей консоли:

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]" 

Я совершенно новичок в mongoDB, как 3 дня назад :( .... Дайте мне выход !!!!

И я также хочу знать, есть лиспособ получения определенных данных, например, если я знаю любой ImageName, могу ли я получить его BinaryData??

1 Ответ

4 голосов
/ 26 ноября 2010

Запрос должен выглядеть примерно так:

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

Это вернет документ Album со всеми двоичными данными.

Вы не сможетевернуть только этот кусок.Тем не менее, вы можете просто вернуть «массив Thumbsize», используя следующую команду:

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

Однако, если у вас есть несколько больших изображений, вам нужно посмотреть на GridFS для их хранения.изображения, а затем сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...