【问题标题】:Querying Array Positions in MongoDB?在 MongoDB 中查询数组位置?
【发布时间】:2010-11-26 01:03:26
【问题描述】:

我正在为 mongoDB 使用 Java 驱动程序。我有一个包含AlbumNamePreviewSizeThumbSize_idComments 的文档。 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" : [ ]}

我应该如何从PreviewSize 获得TomJerry2_468x342.jpg 及其&lt;Binary Data&gt;

我是 mongoDB 的新手。我不知道它是否可能。我刚刚构建了这个文档,我可以用新图像更新这个文档。我从this 演示中了解到这一点。

我的问题是,当我有它的名字时,我怎样才能获得任何特定的&lt;Binary Data&gt;

任何建议都会更感激!

谢谢!!!

更新

例如://我试过的代码,

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??

【问题讨论】:

  • 为什么没有人回答我?是不是问题看不懂?也没有cmets!!

标签: java mongodb


【解决方案1】:

查询应该是这样的:

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

这将返回包含所有二进制数据的专辑文档。

您将无法仅退回那一件。但是,您可以使用以下命令返回“Thumbsize 数组”。

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

但是,如果您有几个大图像,您将需要查看 GridFS 来存储这些图像,然后制作一个 .

【讨论】:

  • 我在谷歌搜索了 3 天。我可以在所有地方看到您给出的查询。我正在使用java。我是一个新手。刚才我更新了问题。请看一下!!!
  • 请查看您的错误信息。这显然发生在这里:(String) ((BasicDBList)result.get("PreviewSize")).get("ImageName");。您正在尝试在 List 对象上调用 .get("ImageName")。该对象是 JSON 中的一个数组。显然你不想要“ImageName”,你想要像.get(0).get("ImageName") 这样的东西。最好重新阅读并理解错误信息。
猜你喜欢
  • 2018-08-14
  • 2017-01-25
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多