2015-09-28 2 views
2

Рассмотрите представленные ниже коллекционные документы «рестораны» в базе данных «mongodb» ресторана.MongoDb GridFS с существующей конкретной коллекцией в базе данных

{ 
"_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 мы можем хранить документы, которые превышают лимит по умолчанию 16mb, используя «gridfs». Я не могу найти ссылки, чтобы продемонстрировать это. Мне нужно хранить документы gridfs вместе с существующими полями в коллекции.

+0

Вы, конечно, не хотите GridFS, как это просто инвентарь «двоичное» хранение данных в кусках (до 16 МБ) и интерфейс для хранения и извлечения этих данных в виде всего содержимого. Нет возможности «запрашивать» внутренний контент, как вы можете, с полями документа. Если ваши данные массива будут действительно «слишком большими», вам лучше хранить в другой коллекции. Но вопросы, которые вы действительно должны задавать себе, - это 1. Действительно ли это «действительно» будет слишком большим? Поскольку для достижения 16 МБ требуется много данных. 2. Нужно ли мне все-таки хранить все это? Или хватит ли совокупных итогов? –

+0

Вы, кажется, пытаетесь ответить долго. Пожалуйста, скорее добавьте детали к своему вопросу и просто предупредите комментаторов об изменениях. Вы в основном не понимаете, что такое GridFS, поэтому я предлагаю прочитать некоторую документацию. Вы либо хотите отдельную коллекцию, либо пересмотреть то, что необходимо хранить, или это возможный реальный рост. –

+0

Привет, Блэйкс Семь, Спасибо за обновление. отвечая на ваши вопросы 1. Неужели это «действительно» будет слишком большим? Поскольку для достижения 16 МБ требуется много данных: «Да». 2. Мне действительно нужно все это хранить? Или хватит ли совокупных итогов? : «Все нужно хранить таким образом». Так GridFs нельзя использовать в этом случае, что может быть альтернативной идеей? Новый сборник с присоединением к существующей коллекции является единственной альтернативой? или есть любой другой способ пойти .. Пожалуйста, совет – Root

ответ

2

Просто потому, что вы можете встраивать документы, это не означает, что это всегда хорошая идея. Чаще всего это не так.

Markus W Mahlberg

Это в основном работает только в "One-to (Very-) Немного" отношения. В вашем случае это другое.

Задайте правильный вопрос. Что вы действительно хотите знать? Моя догадка

Каких сорта для данного ресторана?

Итак, моделирование становится легким. Во-первых, 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 } 
)