我有这个简单的mongo系列:
{
"_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"
}
}
]
}
]
}
我一直在阅读很多关于$ where功能和地图缩小的内容,但是唉,我没有走得太远。我正在尝试为每个应用程序ID选择每个屏幕截图的所有中等图像。我不确定如何才能返回每个屏幕截图的媒体图像,而不是其他内容。有任何想法吗?任何指针都会很棒:)
编辑:db.Screenshot.find({ "applicationId": 1, "$where": "function() { return this.screenshots.images.size == 'medium'; }" }).sort([ ]);
我已经走到了这一步,但它不起作用。唉。仍在阅读我可以在谷歌上找到的所有内容。
答案 0 :(得分:1)
为什么您尝试仅返回中等屏幕截图?是出于性能原因吗?如果每个applicationId有一个文档,那么仅返回中等屏幕截图(例如,MongoDB将从磁盘加载相同数量的物理IO加载数据)将不会更有效。在这种情况下,MongoDB与RDBMS有很大的不同。
除非相关文档很大,并且您尝试在一个查询中返回许多应用程序的中型屏幕截图,否则将没有太多(如果有)性能优势。我建议您只是通过applicationId查询文档,然后在代码中过滤掉您想要的屏幕截图。
最终,您可能会使用新的aggregation framework执行此类操作,但直到2.2才会发布。