'또는'조건이있는 MongoDB 쿼리
그래서 그룹 멤버십을 추적하는 문서가 포함되어 있습니다. 포함 된 각 문서에는 다른 컬렉션의 그룹을 가리키는 ID, 시작 날짜 및 선택적 만료 날짜가 있습니다.
그룹의 현재 구성원을 쿼리하고 싶습니다. "현재"는 시작 시간이 현재 시간보다 짧고 만료 시간이 현재 시간보다 큼 또는 null을 의미합니다.
이 조건부 쿼리는 나를 완전히 차단합니다. 두 개의 쿼리를 실행하고 결과를 병합하여 수행 할 수 있지만보기 흉해 보이고 모든 결과를 한 번에로드해야합니다. 또는 만료 시간을 먼 미래의 임의의 날짜로 기본값으로 설정할 수 있지만, 그것은 더 추하고 잠재적으로 취약 해 보입니다. SQL에서는 "(expires> = Now ()) OR (expires IS NULL)"로 표현하고 싶지만 Mongo에서 어떻게하는지 모르겠습니다.
어떤 아이디어? 미리 감사드립니다.
누군가가 앞으로이 페이지를 우연히 발견 할 경우에 대비해 업데이트 할 것이라고 생각했습니다. 1.5.3부터 mongo는 이제 실제 $ or 연산자를 지원합니다. http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or
이제 "(expires> = Now ()) OR (expires IS NULL)"쿼리를 다음과 같이 렌더링 할 수 있습니다.
{$or: [{expires: {$gte: new Date()}}, {expires: null}]}
누구나 유용하다고 생각하는 경우 www.querymongo.com 은 OR 절을 포함하여 SQL과 MongoDB 간의 변환을 수행합니다. SQL에 해당하는 것을 알고있을 때 구문을 알아내는 데 정말 도움이 될 수 있습니다.
OR 문의 경우 다음과 같습니다.
SQL :
SELECT * FROM collection WHERE columnA = 3 OR columnB = 'string';
MongoDB :
db.collection.find({
"$or": [{
"columnA": 3
}, {
"columnB": "string"
}]
});
기본적으로 Mongo의 개체와 식을 함께 쿼리합니다. Mongo는 현재 이러한 쿼리에 대해 OR 연산자를 포함하지 않지만 이러한 쿼리를 표현하는 방법이 있습니다.
"in"또는 "where"를 사용하십시오.
다음과 같이 될 것입니다.
db.mycollection.find( { $where : function() {
return ( this.startTime < Now() && this.expireTime > Now() || this.expireTime == null ); } } );
db.Lead.find (
{"name": {'$regex' : '.*' + "Ravi" + '.*'}},
{
"$or": [{
'added_by':"arunkrishna@aarux.com"
}, {
'added_by':"aruna@aarux.com"
}]
}
);
사용 $where
이 인덱스를 사용할 수 없기 때문에 쿼리하는 것은 부분적으로 느려집니다. 이런 종류의 문제에 대해서는 당연히 Now ()보다 항상 큰 "expires"필드에 높은 값을 저장하는 것이 더 낫다고 생각합니다. 앞으로 수백만 년 동안 매우 높은 날짜를 저장하거나 별도의 유형을 사용하여 결코 표시하지 않을 수 있습니다. 교차 유형 정렬 순서는 여기 에서 정의 됩니다 .
빈 Regex 또는 MaxKey (언어가 지원하는 경우)는 모두 좋은 선택입니다.
참고 URL : https://stackoverflow.com/questions/2008032/mongodb-query-with-an-or-condition
'IT Share you' 카테고리의 다른 글
파이썬 변수가 문자열인지 목록인지 어떻게 알 수 있습니까? (0) | 2020.11.29 |
---|---|
PHP 배열에 함수를 저장할 수 있습니까? (0) | 2020.11.29 |
PHP를 사용하여 이전 URL을 얻는 방법 (0) | 2020.11.29 |
autosetuprebase 대 autosetupmerge (0) | 2020.11.29 |
배열의 모든 값을 설정하는 가장 빠른 방법은 무엇입니까? (0) | 2020.11.29 |