2016-03-28 3 views
1

ситуации:MongoDB - Нужна помощь в обновлении объекта в пределах массива Документа

У меня есть коллекция под названием «сотрудники». Эта коллекция содержит массив менеджеров. Каждый объект-менеджер имеет свойство «directReports». Это свойство представляет собой массив объектов, представляющих своих подчиненных. Например:

db.employees.find({ name: 'John Smith' }); 

{ 
    "id" : 1234, 
    "name" : "John Smith", 
    "FirstName" : "John", 
    "LastName" : "Smith", 
    "SamAccountName" : "jsmith", 
    "DepartmentName" : "Management", 
    "SupID" : 0, 
    "Email" : "[email protected]", 
    "SupSamAccountName" : "bross", 
    "SupName" : "Bob Ross", 
    "directReports" : [ 
    { 
     "id" : 5678, 
     "name" : "Jane Doe", 
     "FirstName" : "Jane", 
     "LastName" : "Doe", 
     "SamAccountName" : "jdoe", 
     "DepartmentName" : "Agent", 
     "SupID" : 1234, 
     "Email" : "[email protected]", 
     "SupSamAccountName" : "jsmith", 
     "SupName" : "John Smith", 
    },...]} 

Что я хотел бы сделать:

Я хотел бы добавить новое свойство, называемое «состояние» (со значением «Обед») Джейн Доу.

Как это сделать?

Любая помощь очень ценится!

ответ

0

Я думаю, вам нужно добавить «статус» со значением «запуска» в вашу модель и после создания функции для обновления всех данных сотрудников. Надеюсь, что это помогает

1

Предполагая SamAccountName s являются уникальными:

db.employees.update({ 
    { SamAccountName: "jsmith", directReports.SamAccountName: "jdoe" }, 
    { $set: { directReports.$.status: "Lunch" } } 
}) 

на основе тегов на этот вопрос, так как вы используете Mongoose, не забудьте обновить вашу схему надлежащим образом. Вы можете рассмотреть возможность переделать свою схему, чтобы воспользоваться Mongoose query population.

+0

Я попытался запустить это, и он дал мне ошибку синтаксиса: E QUERY [thread1] SyntaxError: недопустимое свойство идентификатор @ (оболочки) –

+0

вы используете '' id's или _id's? Я принял 'id' на основании вашего вопроса. По умолчанию MongoDB использует '_id' как уникальный идентификатор, который является' ObjectId's – ggallo

+0

. Я фактически использую SamAccountName для менеджера и подчиненного. Я даже пытался использовать Mongo's _id, но это тоже не сработало. –

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