2013-09-24 1 views
1

몽구스를 사용하고 있는데 배열 요소를 업데이트하고 다시 업데이트하려고합니다. 이 내 문서 구조입니다 :Mongodb : findOneAndUpdate를 사용한 배열 요소 투영이 작동하지 않습니까?

{ name:String, 
    friends:[ 
     { name:String, 
      age:Number 
     } 
    ] 
} 

나는 다음과 같은 쿼리를 실행하면 나는 결과의 모든 친구를 얻을 수 있지만 난 단지 다시 25 옛 친구를 얻으려면 : the docs으로

theCollection.findOneAndUpdate(
    { name : 'cherif', 
     'friends.name':'kevin' 
    }, 
    { $set:{ 
      'friends.$.age':25 
     } 
    }, 
    { friends: 
     { $elemMatch: 
      { age : 25 } 
     } 
    }, 
    function(err,result){ 
     if (!err) { 
      console.log(result); 
     }}); 

답변

5

에 대한

theCollection.findOneAndUpdate(
    { name : 'cherif', 
     'friends.name':'kevin' 
    }, 
    { $set:{ 
      'friends.$.age':25 
     } 
    }, 
    { select: { 
      friends: { 
       $elemMatch: 
       { age : 25 } 
      } 
     } 
    }, 
    function(err,result){ 
     if (!err) { 
      console.log(result); 
     } 
    }); 
+3

I : 지정 findOneAndUpdate, 당신은 options 매개 변수의 select 속성으로 영사 객체를 포함 할 필요가 여기서 $ projection을 사용할 수 있습니까? 예를 들어'Doc.findOneAndUpdate ({_id : id, 'comments._id': cmtId}, {...}, {select : 'comments. $': 1})'와 같이 말입니다. 나는 이것을 시도했지만 이상하게도 {{} {{}, {}}, _id : ...}'를 반환했다. – KwiZ

+0

@KwiZ 당신은 이것을위한 해결책을 찾았습니까? 나는 같은 방법으로 $ projection을 사용하려하지만 운이 없다! – admrply

+0

@admrply 지금하고있는 일에 대한 자세한 내용과 함께 새로운 질문을 게시하십시오. – JohnnyHK