$and$and는 하나 이상의 표현식(<expression1>,<expression2>등)으로 구성된 배열에서 논리적AND연산을 수행하고 모든 표현식을 충족하는 문서를 선택합니다.참고
MongoDB는 쉼표로 구분된 표현식 목록을 지정할 때 암시적
AND작업을 제공합니다.
호환성
다음 환경에서 호스팅되는 배포에 $and 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$and의 구문은 다음과 같습니다.
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
행동
MongoDB의 쿼리 옵티마이저는 $and 표현식의 절을 평가할 때 실행할 최상의 계획을 선택 시 $and 표현식의 절을 충족하는 데 도움이 될 수 있는 인덱스를 고려합니다.
쿼리 엔진이 쿼리를 최적화할 수 있도록 $and 은 다음과 같이 오류를 처리합니다:
$and에 제공된 표현식이 단독으로 평가될 때 오류가 발생하는 경우, 표현식이 포함된$and이 오류를 일으킬 수 있지만 오류가 보장되지는 않습니다.$and에 제공된 첫 번째 표현식 뒤에 제공된 표현식은 첫 번째 표현식이false로 평가되더라도 오류를 일으킬 수 있습니다.
MongoDB Shell(mongosh)을 포함한 대부분의 프로그래밍 언어와 드라이버는 동일한 객체 수준에서 중복 키를 가진 객체 생성을 허용하지 않습니다. 예시는 다음과 같습니다.
db.inventory.find( { price: { $in: [ 7.99, 3.99 ], $in: [ 4.99, 1.99 ] } } )
이전 쿼리는 필드 이름 price가 동일한 객체 수준에서 중복된 연산자가 있기 때문에 유효하지 않습니다. 서버로 전송된 쿼리는 의도한 것과 다릅니다. 쿼리를 작동시키려면 명시적 AND를 사용하세요.
db.inventory.find( { $and: [ { price: { $in: [ 7.99, 3.99 ] } }, { price: { $in: [ 4.99, 1.99 ] } } ] } )
이전 쿼리는 두 조건이 모두 만족되는지 명확하게 확인합니다. 즉, price 배열에는 각각의 $in 집합에서 최소한 하나 이상의 값이 포함되어야 합니다. 자세한 내용은 예시를 참조하세요.
예시
AND 동일한 필드를 지정하는 여러 식이 있는 쿼리
다음 쿼리를 고려해보세요.
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
이 쿼리는 inventory collection의 모든 문서를 선택합니다. 이 때,
price필드 값이1.99과(와) 같지 않으며,필드에
price이(가) 존재합니다.
price 필드의 연산자 표현식을 결합하는 암시적 AND 작업을 사용하여 쿼리를 다시 작성할 수 있습니다.
db.inventory.find( { price: { $ne: 1.99, $exists: true } } )
AND 동일한 연산자를 지정하는 여러 표현식이 있는 쿼리
다음 쿼리를 고려해보세요.
db.inventory.find( { $and: [ { $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] }, { $or: [ { sale: true }, { price : { $lt : 5 } } ] } ] } )
쿼리는 모든 문서가 어디에 있는지 선택합니다.
qty필드 값이10보다 작거나50보다 큽니다. 또한sale필드 값이true과 같거나price필드 값이5보다 작습니다.
쿼리에서 $or 연산자를 두 번 이상 사용하므로 암시적 AND 연산을 사용할 수 없습니다.