AND 및 OR을 모두 사용하는 mongodb 쿼리
mongodb 쿼리에서 OR과 AND의 조합을 사용할 수 있습니까?
아래 코드가 예상대로 작동하지 않습니다.
db.things.find({
$and:[
{$or:[
{"first_name" : "john"},
{"last_name" : "john"}
]},
{"phone": "12345678"}
]});
데이터베이스 내용:
> db.things.find();
{ "_id" : ObjectId("4fe8734ac27bc8be56947d60"), "first_name" : "john", "last_name" : "hersh", "phone" : "2222" }
{ "_id" : ObjectId("4fe8736dc27bc8be56947d61"), "first_name" : "john", "last_name" : "hersh", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8737ec27bc8be56947d62"), "first_name" : "elton", "last_name" : "john", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8738ac27bc8be56947d63"), "first_name" : "eltonush", "last_name" : "john", "phone" : "5555" }
위의 쿼리를 쿼리할 때 - 아무것도 얻지 못했습니다!
> db.things.find({$and:[{$or:[{"first_name" : "john"}, {"last_name" : "john"}]},{"phone": "12345678"}]});
>
mongo 1.8.3을 사용하고 있습니다.
db.things.find({
$and: [
{
$or: [
{"first_name": "john"},
{"last_name": "john"}
]
},
{
"Phone": "12345678"
}
]
})
AND는 두 가지 표현식 배열 또는 전화기를 사용합니다.
OR은 first_name, last_name 두 식을 사용합니다.
그리고.
OR
이름
성_이름
전화번호.
참고: MongoDB의 최신 버전으로 업그레이드하십시오.
암시적 AND 연산을 사용하려면 더 짧아야 합니다.
db.things.find({
$or : [
{"first_name": "john"},
{"last_name": "john"}
],
"phone": "12345678"
})
이는 다음과 같은 방식으로 가능합니다(mongodb 3.4).
여기 좋은 예가 있습니다.
https://docs.mongodb.com/manual/reference/operator/query/and/ # 및 여러 개의 설명이 포함된 설명-동일한 설명 지정
db.getCollection('tbl_menu_items').find({)$ 및 : [$or : [ {가격: 0.99}, {가격: 1.99} ] },$or : [ {sale : true }, {qty : {$lt : 20 } ] }]} )
이 쿼리는 다음 위치에 있는 모든 문서를 선택합니다.
가격 필드 값이 0.99 또는 1.99이고, 판매 필드 값이 true 또는 qty 필드 값이 20보다 작습니다.
다음은 $ 및 조건의 예로, $ 또는 쿼리를 사용하여 조건을 일치시킵니다. 예를 들어,
다음 쿼리를 고려하는 중
db.getCollection('tbl_menu_items').find( '$or':[ {'$and': [ {위치: {'$in'}: [ ObjectId("588054c63879f2e767a1d553") ] },is_ryward: 1,points_required_to_message_filename: {'$filename': 500 }}},'$ 및': [ {위치: {'$in'}: [ ObjectId("588054c63879f2e767a1d553") ] },is_freebie: 1 } ] }})
이 쿼리는 다음 위치에 있는 모든 문서를 선택합니다.
588054c63879f2e767a1d553의 위치 배열이며 is_ryward = 1 및 points_required_to_required_to_required_required_recision < 500
또는
위치 배열은 588054c63879f2e767a1d553이고 is_freebie입니다.
$와 $는 MongoDB v2.0+에서만 지원된다고 생각합니다.애초에 콘솔이 그 표현을 수용했다는 것이 놀랍습니다.제가 가지고 있는 1.8 서버에 대해 다시 만들어 보겠습니다.
또한 다음에 대한 10Gen의 고급 쿼리 문서를 확인$and
.
갱신하다
샘플 데이터를 v1.8x와 v2.0x MongoDB 서버에 모두 입력했습니다.쿼리는 v2.0x에서 작동하고 v1.8x에서는 실패합니다.이것은 문제가 있다는 나의 (그리고 Miikka의) 의심을 확인시켜줍니다.$and
서버 버전을 확인할 수 있습니다.
저는 여기 웹에서 이 문제에 대한 현명한 해결책을 찾았습니다.이것이 도움이 되길 바랍니다.
-SethO
간단히 다음과 같은 질문을 작성할 수 있습니다.
const query = {};
query['phone'] = '12345678';
query['$or'] = [
{ "first_name": "john" },
{ "last_name": "john" }
];
db.things.find(query);
언급URL : https://stackoverflow.com/questions/11196101/mongodb-queries-both-with-and-and-or
'IT' 카테고리의 다른 글
Ubuntu 13.10으로 업그레이드한 후 Eclipse 메뉴가 표시되지 않음 (0) | 2023.04.28 |
---|---|
"테이블을 다시 만들어야 하는 변경 내용 저장 방지" 부정적 영향 (0) | 2023.04.28 |
C#의 목록에서 항목을 제거하는 방법은 무엇입니까? (0) | 2023.04.28 |
"COM 클래스 공장에서 구성 요소를 검색하는 중...오류: 80070005 액세스가 거부되었습니다." (HRESULT: 0x80070005(E_ACCESSDENIED)) (0) | 2023.04.28 |
(NOLOCK)와 트랜잭션 격리 수준 설정 읽기가 커밋되지 않은 상태 (0) | 2023.04.28 |