2012-01-23 5 views
0

Я ищу для получения некоторых данных от MongoDB, но я не уверен, как это сделать эффективно. Возможно, моя структура коллекции/документа не идеальна, и мне нужно сохранить ее по-другому. Любые советы будут оценены ..MongoDB - как запросить эти данные

У меня есть две коллекции - объекты и объектные представления

объектов

{ 
    "_id" : ObjectId("4f182ac3369a2b2603010000"), 
    "name" : "Object name", 
    "project_id" : "4f182a76369a2b2903000000" 
} 

просмотр объектов

{ 
"_id" : ObjectId("4f182ac3369a2b2603010000"), 
    "2012" : { 
    "r" : 8, 
    "t" : 16, 
    "u" : 10, 
    } 
} 

Я хочу, чтобы получить 2012.r из «Обь ject views для всех объектов, принадлежащих конкретному проекту.

Вот мои идеи о том, как это сделать:

  1. Есть запрос, возвращающий найти все документы от «объекта Views» коллекции, которые соответствуют полю _id. Для меня это не кажется эффективным или аккуратным способом делать вещи (представьте, если были 2000 объектов).
  2. Добавьте поле project_id ко всем документам «представления объектов», затем выполните запрос поиска, чтобы выбрать все документы, соответствующие проекту_ид. Является ли это неодобрением/эффективным для выбора нескольких документов (может быть всего 2 или целых 2000)?
  3. Создайте коллекцию специально для этой проблемы. Он будет содержать документ для каждого проекта, где каждый документ указывает все экземпляры объектов, принадлежащих этому проекту, и значения 2012.r. Затем выполните запрос поиска, чтобы выбрать один документ.

Любые мысли/советы или альтернативные решения были бы оценены!

ответ

1

Добавить PROJECT_ID поля для всех «объектных представлений» документов, а затем сделать находку запрос, чтобы выбрать все документы, которые соответствуют PROJECT_ID. Is он нахмурился/эффективен, чтобы выбрать несколько документов (может быть всего 2 или целых 2000)?

Определенно способ сделать это (плюс индекс по этой колонке), как с точки зрения производительности (db.object_views.find({project_id : "4f182a76369a2b2903000000" })) и код & простоты запроса.

Драйверы выполняют дозирование под капотом, поэтому получение 2000 документов не имеет большого значения.

+0

Прост достаточно, спасибо! Как вы говорите, полагая, что у него есть указатель на него, вы бы рекомендовали хранить project_id как ObjectId или строку? – RichW

+1

Я бы использовал тот же тип, что и в Object.project_id – milan

0

Если у вас есть большой опыт в SQL, вы можете найти this SQL-MongoDB переводчик полезно:

Однако, он пропускает кавычки в параметрах, когда это необходимо. Итак, следите за этим.

Надеюсь, это полезно для вас

Смежные вопросы