2016-06-20 1 views
1

$ project 단계에서 mongodb 집계 파이프 라인이 있는데 조건이 충족되는 경우에만 특정 필드를 포함하고 싶습니다. 특히, 한 조건에서 _id를 제외하고 두 번째 필드 'second_id'를 다른 조건에 포함시키고 자합니다.조건부로 필드 (_id 또는 기타)를 mongodb 프로젝트 집계에 포함 시키시겠습니까?

mongodb $ 프로젝트에서 필드를 제외 할 수는 없지만 조건부로 필드를 포함 할 수 있습니까?

조건부로 _id 필드를 제외 할 수있는 방법이 있습니까? 0 또는 1을 허용하지만 if 문을 기반으로 0 또는 1을 결정하려면 어떻게해야합니까? 어떻게이 일을 끝낼 수 있습니까? _id에 대한

의사 코드는 :

$project: { _id: { $ifNull: [ "$user_id", 0 ] } } 

이의 주요 사용은 결과 _id로 doc.user_id를 사용하거나 그 USER_ID가 null의 경우 MongoDB를 새로운 자동 증가 _id를 만들 수 있도록하는 것입니다.

답변

0

$ project 단계에서는 현재이 작업을 수행 할 방법이 없지만 $ redact 단계를 사용하여 조건부로 필드를 제거 할 수 있습니다 (예 : 사용자가 수행하는 것처럼 값을 0으로 설정).

db.collection.aggregate(
    ... matching and stuff ... 
    {$project: { _id: { $ifNull: [ "$user_id", 0 ] } }}, 
    {$redact: { 
    {$cond: { 
    if: { $eq: [ "$user_id", 0 ] }, 
    then: '$$PRUNE', 
    else: '$$DESCEND' 
    }} 
} 
관련 문제