具有数据库中现有特定集合的MongoDb GridFS

时间:2015-09-28 05:58:56

标签: mongodb gridfs

在“restaurant”mongodb数据库中考虑以下“餐馆”收集文件。

{
"_id" : ObjectId("55f6564073fc0a09338cf434"),
"address" : {
    "building" : "97-22",
    "coord" : [ 
        -73.8601152, 
        40.7311739
    ],
    "street" : "63 Road",
    "zipcode" : "11374"
},
"borough" : "Queens",
"cuisine" : "Jewish/Kosher",
"grades" : [ 
    {
        "date" : ISODate("2014-11-23T17:30:00.000-06:30"),
        "grade" : "Z",
        "score" : 20
    }, 
    {
        "date" : ISODate("2013-01-16T17:30:00.000-06:30"),
        "grade" : "A",
        "score" : 13
    }, 
    {
        "date" : ISODate("2012-08-01T17:30:00.000-06:30"),
        "grade" : "A",
        "score" : 13
    }, 
    {
        "date" : ISODate("2011-12-14T17:30:00.000-06:30"),
        "grade" : "B",
        "score" : 25
    },

   ........
   .......
   .......
     {
        "date" : ISODate("2011-12-14T17:30:00.000-06:30"),
        "grade" : "AZZ",
        "score" : 25
    },   -- It reaches 15 MB
],
"name" : "Tov Kosher Kitchen",
"restaurant_id" : "40356068"

}

在本文档中,“grade”字段是嵌入式文档数组。该阵列将达到mongodb最大文档大小16Mb。所以现在我们正在改变这个集合的数据模型。我开始知道在mongoDb中我们可以使用“gridfs”存储超过默认限制16mb的文档。我无法找到证明这一点的链接。我需要将gridfs文档与集合中的现有字段一起存储。

1 个答案:

答案 0 :(得分:2)

  

仅仅因为你可以嵌入文档,这并不意味着它总是一个好主意。通常情况下,它不是。

     

Markus W Mahlberg

它基本上只能用于“一对一(非常)”的关系。在你的情况下,它是不同的。

提出正确的问题。你真的想知道什么?我猜是

  

指定 餐厅的成绩是多少?

因此,建模变得容易。首先是restaurants集合

{
  _id: someObjectId,
  name: "The Foo Bar",
  cuisine: "Foo and Baz",
  ...
}

grades集合:

{
  _id: new ObjectId(),
  restaurant: someObjectId,
  grade: "A",
  date: someISODate
}

回答这个问题只不过是:

db.grades.find(
  { restaurant: givenRestaurantsObjectId }
)