2017-02-23 1 views
2

this 대답에 따르면, 나는 배열의 크기를 찾아 여분의 필드에 저장하려고합니다.mongodb 배열의 길이를 알아

나는 모음 user_details을하고 문서 구조는 무엇인가 :

{ 
    user_id : 1, 
    likes : [1,2,3,4], 
    likes_count : 0 
} 

내가 사용 쿼리는 다음과 같습니다

db.user_details.update({user_id : 1},{$set:{ likes_count : this.likes.length }}) 

을하지만, 그 오류가 발생

"message" : "Cannot read property 'length' of undefined" 

추가 필드에 배열 길이를 저장하려면 어떻게합니까?

PS : 나는에 돌려 variable에서 likes_count와이

Model.aggregate(
    [ 
     { 
      $project: { 
       likes_count: { $size: "$test" } 
      } 
     } 
    ], (err, re) => { 
     console.log(err, re); 
     var likes_count = re[0].likes_count; 
     Model.update({email: 1}, {$set: {likes_count: likes_count}}, (err, d) => { 
      console.log(err, d); 
     }) 
    } 
) 
같은 likes_count 변수

뭔가를 제공하여 업데이트를 수행 저장

답변

1

가 MongoDB를 3.4 및 최신, 당신이 원하는 필드를 추가 할 $addFields 파이프 라인을 사용할 수 있습니다 ($addFields 단계는 명시 적으로 입력 문서의 기존의 모든 필드를 지정하고 새 필드를 추가하는 $project 단계에 해당) 및 그런 다음 집계 연산의 결과를 $out 연산자를 사용하여 동일한 모음에 쓰면 효과적으로 기본 모음을 업데이트 할 수 있습니다. $out 조작으로 지정된 컬렉션이 이미 존재하는 경우

, 다음 통합이 완료되면, $out 단계는 원자 적으로 새로운 결과를 수집하여 기존 모음을 대체합니다.

카운트를 얻으려면 배열 필드의 길이를 반환하는 $size 연산자를 사용하십시오. 전반적으로 원하는 업데이트 작업을 수행하려면 다음 파이프 라인을 실행해야합니다.

db.user_details.aggregate([ 
    { "$addFields": { "likes_count": { "$size": "$likes" } } }, 
    { "$out": "user_details" } 
]) 
관련 문제