【问题标题】:MongoDb GridFS with the existing specific collection in a databaseMongoDb GridFS 与数据库中现有的特定集合
【发布时间】:2015-12-25 07:30:55
【问题描述】:

考虑“restaurant”mongodb 数据库中的以下“restaurants”集合文档。

{
"_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"

}

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

【问题讨论】:

  • 您当然不想要 GridFS,因为它只是实现了数据块(小于 16MB)的“二进制”存储以及将数据作为整个内容存储和检索的接口。无法像使用文档字段那样“查询”内部内容。如果您的数组数据真的“太大”,那么您最好存储在另一个集合中。但你真正应该问自己的问题是 1. 它“真的”会太大吗?因为达到 16MB 需要大量数据。 2. 我真的需要存储所有这些吗?还是保持汇总总数就足够了?
  • 您似乎在尝试进行长回复。请改为向您的问题添加详细信息,并提醒评论者注意更改。你基本上误解了 GridFS 是什么,所以我建议阅读一些文档。您要么想要一个单独的集合,要么重新考虑需要存储什么或最终的实际增长。
  • 您好,布雷克七,感谢您的更新。回答你的问题 1. 它“真的”会太大吗?因为达到 16MB 需要大量数据:“是”。 2.我真的需要存储所有这些吗?还是保持汇总总数就足够了? :“都需要以这种方式存储”。所以在这种情况下不能使用 GridFs,那么还有什么替代的想法?与现有集合连接的新集合是唯一的选择吗?或者还有其他的路要走..请指教
  • 我仍然不认为你是现实的。您提出的数据需要数十万个条目才能接近 16MB(并不是说您真的应该这样做)。我想提供的主要指南是浏览这个网站上的问题和答案。如果放入 MongoDB 文档中,没有一个条目包含会破坏 16MB 存储空间的答案或评论详细信息。你不会是第一个提出你的新“杀手级应用”将获得比 StackOverflow 或其他更多流量或使用率的人。但我强烈怀疑。

标签: mongodb gridfs


【解决方案1】:

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

马库斯·W·马尔伯格

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

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

给定餐厅的评分是多少?

因此,建模变得容易。首先,一个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 }
)

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 2014-02-08
    • 2013-04-18
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2017-02-17
    相关资源
    最近更新 更多