2016-08-29 2 views
1

Я пытался обновить значение в массиве, используя Mongoose и таблица, я создал приведена нижеОбновление одного значения массива из с вложенным объекта в Мангусте

var newUser = User({ 
     name  : 'XXX', 
     userName : 'XXX', 
     password : 'XXX', 
     admin  : true, 
     location : 'KKK', 
     studentDeatails : [ 
      { 
       name : 'AAA', 
       study : { 
        dept : 'CSE', 
        course : 'B.E', 
        year : 4 
       } 
      }, 
      { 
       name : 'BBB', 
       study : { 
        dept : 'EEE', 
        course : 'B.E', 
        year : 3 
       } 
      } 
     ], 
     createdAt: Date(), 
     updatedAt: Date() 
    }); 

Результата:

[ { _id: 57c42dd22842e7561e8b9612, 
    name: 'XXX', 
    userName: 'XXX', 
    password: 'XXX', 
    admin: true, 
    location: 'KKK', 
    createdAt: 2016-08-29T12:42:58.000Z, 
    updatedAt: 2016-08-29T12:42:58.000Z, 
    studentDeatails: [ { name: 'AAA', 
    _id: 57c42dd22842e7561e8b9614, 
    study: { dept: 'CSE', course: 'B.E', year: 4 } }, 
    { name: 'BBB', 
    _id: 57c42dd22842e7561e8b9613, 
    study: { dept: 'EEE', course: 'B.E', year: 3 } } ] } ] 

Я пытался обновить значение отдела: 'EEE' -> dept: 'MECH'

Мой ожидаемый ответ должен быть:

[ { _id: 57c42dd22842e7561e8b9612, 
    name: 'XXX', 
    userName: 'XXX', 
    password: 'XXX', 
    admin: true, 
    location: 'KKK', 
    createdAt: 2016-08-29T12:42:58.000Z, 
    updatedAt: 2016-08-29T12:42:58.000Z, 
    studentDeatails: [ { name: 'AAA', 
    _id: 57c42dd22842e7561e8b9614, 
    study: { dept: 'CSE', course: 'B.E', year: 4 } }, 
    { name: 'BBB', 
    _id: 57c42dd22842e7561e8b9613, 
    study: { dept: 'MECH', course: 'B.E', year: 3 } } ] } ] 

Код я попытался это:

User.findOneAndUpdate(
    { name: 'XXX', 'studentDeatails.study.year': 3 }, 
    { "$set": { 'studentDeatails.0.study.$.dept' : 'MECH' } }, 
    function(err){ 
     if(err){ 
      console.log(err); 
     } else { 
      console.log("Successfully Updated"); 
     } 
    } 
); 

Исправьте то, что я сделал неправильно, используя Mongoose, это будет большим подспорьем!

ответ

2

Поскольку study поля является поддокументом, нет необходимости применять позиционный оператор $ как то работает только на встроенных документах в массиве. Он должен применяться к полю массива studentDeatails (sic). Поэтому ваше обновление должно быть просто:

User.findOneAndUpdate(
    { "name": "XXX", "studentDeatails.study.year": 3 }, 
    { "$set": { "studentDeatails.$.study.dept" : "MECH" } }, 
    function(err){ 
     if(err){ 
      console.log(err); 
     } else { 
      console.log("Successfully Updated"); 
     } 
    } 
); 
+1

Спасибо, что это сработало отлично! @chridam – sunilsmith

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