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.