MongoDB - как запросить эти данные - PullRequest
0 голосов
/ 23 января 2012

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

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

Предметы

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

Виды объектов

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

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

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

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

Будем благодарны за любые мысли / советы или альтернативные решения!

Ответы [ 2 ]

1 голос
/ 23 января 2012

Добавьте поле project_id ко всем документам 'просмотра объектов', затем выполните запрос на поиск, чтобы выбрать все документы, которые соответствуют project_id. Является он не одобрил / эффективно выбрать несколько документов (может быть всего 2 или 2000)?

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

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

0 голосов
/ 07 марта 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...