2012-03-13 7 views
1

Я использую MongoDB в течение недели, и мне очень весело с ним!Извлечение объектов из других объектов

До сих пор тестовое приложение, которое я строил как проекты и этапы. См. Приведенную ниже структуру:

{ 
    "code": "test-project", 
    "milestones": [ 
    { 
     "name": "Test Milestone", 
     "code": "test-milestone" 
    }, 
    { 
     "name": "Test Milestone 2", 
     "code": "test-milestone-2" 
    } 
    ], 
    "name": "Test Project" 
} 

Теперь я редактирую форму для вех. Я бы хотел отредактировать, скажем, «Test Milestone 2». Итак, до сих пор я получал связанный проект, а затем выбираю правильный Milestone из связанной коллекции. Но я хотел бы знать, есть ли способ получить Веху? (в моем случае)

Если да, то вы могли бы привести мне пример того, как это сделать?

Спасибо!

ответ

0

Внесите свой массив веха в проект непосредственно.

Или продолжайте делать то, что вы делаете прямо сейчас. (вы не делаете это неправильно, это просто его природа)

+0

Вехи встроены в мои проекты, нет? Не могли бы вы показать мне пример того, что вы говорите, пожалуйста? Благодаря! – TomShreds

1

Вы можете сделать это с помощью прямого запроса. Вам просто нужно использовать Positional Operator.

Предположим, вы хотите обновить «Test Milestone 2» до «Test Milestone Two». Вы можете выполнить следующий запрос:

db.Projects.update({"milestones.name" : "Test Milestone 2"}, {$set : {"milestones.$.name" : "Test Milestone Two"}}) 

$ держит место исходного массива находки (первая часть update заявления). Это позволяет перейти к элементу массива, который вы хотите изменить.

Рад слышать, что вы наслаждаетесь MongoDB - это довольно весело.

+0

Спасибо, что ответили. Но что, если у другого проекта есть веха под названием «Test Milestone 2»? В примере, который вы мне дали, это для ВСЕХ проектов, так что мне интересно. Благодаря! – TomShreds

+1

Запрос, который я дал, изменит имя всех этапов, соответствующих «Test Milestone 2». Когда он работает, каждый оператор Positional будет применяться к текущему документу, который он затрагивает. Если вы хотите повлиять только на один, вам нужно будет отфильтровать критерии в первой части инструкции обновления. – SethO

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