2012-05-14 100 views
-1

我有这个简单的蒙戈集合返回唯一媒介截图为每个软件:MongoDB的 - - 查询嵌入文档中嵌入收集

{ 
    "_id": ObjectId("4fb176f964debef01e000000"), 
    "applicationId": NumberInt(1), 
    "screenshots": [ 
    { 
     "caption": "ddd", 
     "images": [ 
     { 
      "size": "large", 
      "file": { 
      "$ref": "File", 
      "$id": ObjectId("4fb176f964debef01e000001"), 
      "$db": "flukeytest" 
      } 
     }, 
     { 
      "size": "medium", 
      "file": { 
      "$ref": "File", 
      "$id": ObjectId("4fb176f964debef01e000002"), 
      "$db": "flukeytest" 
      } 
     }, 
     { 
      "size": "small", 
      "file": { 
      "$ref": "File", 
      "$id": ObjectId("4fb176f964debef01e000003"), 
      "$db": "flukeytest" 
      } 
     } 
     ] 
    }, 
    { 
     "caption": "tetsss", 
     "images": [ 
     { 
      "size": "large", 
      "file": { 
      "$ref": "File", 
      "$id": ObjectId("4fb1771164debe9c1a000000"), 
      "$db": "flukeytest" 
      } 
     }, 
     { 
      "size": "medium", 
      "file": { 
      "$ref": "File", 
      "$id": ObjectId("4fb1771164debe9c1a000001"), 
      "$db": "flukeytest" 
      } 
     }, 
     { 
      "size": "small", 
      "file": { 
      "$ref": "File", 
      "$id": ObjectId("4fb1771164debe9c1a000002"), 
      "$db": "flukeytest" 
      } 
     } 
     ] 
    } 
    ] 
} 

我一直在阅读了很多关于$其中功能和地图缩小但很可惜我不是很远。我试图选择一个应用程序ID的每个屏幕截图的所有媒体图像。我不确定我如何才能返回每个屏幕截图的中等图像,而没有其他东西。有任何想法吗?任何指针将是巨大的:)

编辑:db.Screenshot.find({ "applicationId": 1, "$where": "function() { return this.screenshots.images.size == 'medium'; }" }).sort([ ]);到目前为止,我已经得到了这一点,但它不工作。唉。仍然阅读我可以在谷歌找到的一切。

回答

1

为什么你试图返回只有中等截图?这是出于性能原因吗?如果每个应用程序ID有一个文档,那么仅返回中间屏幕截图(例如,MongoDB将执行相同数量的物理IO从磁盘加载数据)效率会更高。在这种情况下,MongoDB与RDBMS显着不同。

除非该文件是巨大的,而你试图返回介质截图许多应用在一个查询,那么将不会有太大的(如果有的话)的性能优势。我建议你只是通过applicationId查询文档,然后在代码中过滤出你想要的截图。

最终,你可能能够做这种使用新aggregation framework的事情,但它不会被释放,直到2.2。

+0

你好。感谢您的回答。今天早上我意识到我的问题有多愚蠢。昨天是漫长的一天。谢谢。 – Flukey

+0

Nah。问一问总无妨。值得肯定的是,这并不是一个巨大的性能损失。 –