我想在mongoDB中存储图像文件的元数据。情况就是这样:
每个文件包含一堆图像+元数据列表(键值 对) 每个图像都有一个元数据列表。
文件和图像的元数据不是固定的或已知的
我的问题首先是mongodb是存储这种结构的好选择吗?如果选择合适,我如何以mongodb的形式存储这个结构,我可以根据文件的元数据以及高性能图像的元数据进行搜索?
您如何看待结构?我怎样才能从中搜索?它的表现如何?
{ fileName: f1
date : '2002'
image1 :{
imageId :1
name :"img1"
focus : 7
}
image1 :{
imageId :1
name :"img1"
focus : 7
...
}
image2 :{
imageId :2
name :"img2"
insId : 23
...
}
}
我想要一些查询:
select * from file where focus =7 / insId =23 / date = 2002
我试过
{ "metaData" : [ { "key" : "imageId", "value" : 1 },{ "key" : "name", "value" : "imag1" }, {"key" : "focus", "value" : 7 } ]}
存储一个图像或文件的元数据。通过这种结构,我可以创建关键和值的索引并通过elemMatch搜索,但是,我不能扩展它 用于层次结构。我不确定这是否是我上面解释过的问题的一个很好的解决方案。
如果你能帮助我,我感激不尽!
答案 0 :(得分:0)
为什么不将所有图像嵌入数组中:
db.files.findOne()
{
_id: ObjectId(...);
fileName: 'f1',
date : '2002',
images : [
{
imageId: 1,
name: "img1",
focus 7
},
{
imageId: 2,
name: "img2",
focus 17
}
]
}
如果您想使用元数据来使用建议使用的索引:
db.files.findOne()
{
_id: ObjectId(...);
fileName: 'f1',
date : '2002',
images : [
{ metadata:[
{key: "imageId", value: 1},
{key: "name", value: "img1"},
{key: "focus", value: 7}
]},
{ metadata:[
{key: "imageId", value: 2},
{key: "name", value: "img2"},
{key: "focus", value: 17}
]}
]
}
然后:
db.files.ensureIndex({"images.metadata.key":1,"images.metadata.value":1})