2016-08-29 9 views
1

にネストされたオブジェクトの単一のアレイ値Iがマングースを使用して配列内の値を更新しようとしていたと私が作成されたテーブルを更新マングース

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 } } ] } ] 
を私はDEPTの値を更新しようとしていた

'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"); 
     } 
    } 
); 

それは大きな助けになるだろう、私はマングースを使用して間違ってやっていること修正してください!

答えて

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

関連する問題