2014-10-14 2 views
0

На переднем конце у меня есть 3 уровня иерархии.Проектирование моделей Mongoose

Верхний уровень представляет собой резюме тест со статистикой, такие как% годен/не годен, различные теги, запускать идентификаторами и т.д.

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

Третий уровень является фактическим тест сам с отчетом, годен/негоден и т.д.

Я использую стек MEAN для этого и было интересно, о компромиссах использования 1,2 или 3 различные модели Mongoose для хранения данных в MongoDB. Я знаю, что одна из проблем с использованием встроенных документов в массиве будет заключаться в том, что я верну весь массив обратно в запрос/обновление вместо определенного элемента.

Вариант 1)

Используйте 3 модели, один для каждой сводки, секции и испытания. Затем используйте тот же run_id, что и значение, на котором я могу связать их вместе.

Вариант 2)

Используйте 2 модели, резюме и раздел. Затем раздел имеет массив со встроенными документами, каждый из которых связан с конкретным тестом.

Вариант 3)

есть только тест и раздел модели и создать резюме, если запрос нуждается.

Не уверен, что этой информации достаточно, дайте мне знать, и я могу попробовать и добавить больше. Благодаря

ответ

1

Я просто цитирую вас на это заявление:

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

в соответствии с документацией для Монго найти http://mongoosejs.com/docs/api.html#model_Model.find

у вас есть эти параметры: Параметры:

  • условия
  • [поля] необязательные поля для выбора
  • [ опции] дополнительно
  • [вызов]

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

мне большинство операций в Монго атомарные, поэтому дело с Монго это проще, чем базы данных, но и вы можете обновить поштучно документа с использованием $ набор как

Model.where({ _id: id }).update({ $set: { title: 'words' }}) 

просто имейте в виду, что обновление документ, в который встроены документы, записывается медленнее, но быстрее для чтения, а в другом случае отдельная коллекция может быть наоборот, для этого нет прямого ответа, иногда вам придется проходить пробную и пробную проверку и видеть независимо от того, что лучше подходит для ваших требований. по вашему сценарию У меня такое ощущение, что вы можете попытаться использовать встроенный документ и посмотреть, как он работает, или вы можете попробовать вариант номер 2.

Надеюсь, это имеет смысл! ура!

+0

Итак, если я правильно понял, я могу установить определенное поле внутри выбранного элемента встроенного документа? .... То есть, скажем, у меня есть раздел, который содержит массив тестовых документов. Могу ли я выбрать только один тест из секции и увеличить его значение. – AsadSMalik

+0

да, вы можете восстановить только его части, а также обновить отдельные элементы массива, llok в этом ответе http://stackoverflow.com/questions/15691224/mongoose-update-values-in-array-of-objects –

+0

вы можете использовать $ оператор в ваших обновлениях, и это делает магию для вас! –

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