在mongodb中存储层次结构文件结构

时间:2014-08-20 22:09:41

标签: mongodb mongodb-query

我想在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搜索,但是,我不能扩展它 用于层次结构。我不确定这是否是我上面解释过的问题的一个很好的解决方案。

如果你能帮助我,我感激不尽!

1 个答案:

答案 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})