MongoDB 집계 프레임 워크 일치 또는


96

$ match에서 OR을 할 수 있습니까?

나는 다음과 같은 것을 의미합니다.

db.articles.aggregate(
    { $or: [ $match : { author : "dave" }, $match : { author : "john" }] }
);

답변:


168
$match: { $or: [{ author: 'dave' }, { author: 'john' }] }

이렇게 $match연산자는 일반적으로 find()함수에 넣는 것을 취하기 때문에


85

이 곳이 특별한 경우에, $or-ing 같은 필드$in운영자는 가독성을 증가도하기 때문에, 더 나은 선택이 될 것입니다 :

$match: { 
  'author': { 
    $in: ['dave','john'] 
  } 
}

MongoDB 문서에 따르면 $in이 경우 사용하는 것이 좋습니다.

$ 또는 $ in

동일한 필드의 값에 대한 동일성 검사 인 <expressions>와 함께 $ or를 사용하는 경우 $ or 연산자 대신 $ in 연산자를 사용합니다.

https://docs.mongodb.com/manual/reference/operator/query/or/#or-versus-in


1
Mongo 문서에 따르면이 "가장 효과적인"방법은 귀하의 예와 같은 동등성 비교를 위해 수행합니다. docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud

3
$ in
이가

1
$ or가 집계 연산자가 아니라고 생각합니다.
Paul Shapiro

@PaulShapiro :이 때문에 투표하지 않았기를 바랍니다. 모두를 위해 반대 투표 전에 이유를 언급하는 것이 모두에게 도움이됩니다. 다음은 참조 부울 집계 연산자-> $ 또는
아몰 M Kulkarni

귀하의 답변은 정확하지 않습니다. 보시다시피 저는 이미 답변이 잘못된 위치와 방법을 설명했습니다.
Paul Shapiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.