복붙노트

[MONGODB] 에 '또는'조건 MongoDB의 쿼리

MONGODB

에 '또는'조건 MongoDB의 쿼리

나는 트랙 그룹 구성원이 포함 된 문서가 그래서. 각 포함 된 문서는 다른 모음, 시작 날짜에 그룹을 가리키는 ID를 가지고, 그리고는 날짜를 만료 선택 사항.

나는 그룹의 현재 구성원에 대한 조회 할. "현재"수단 시작 시간이 덜 현재 시간보다, 그리고 시간이 현재 시간 또는 널 (null)보다 큰 만료됩니다.

이 조건 쿼리는 완전히 나를 차단하고 있습니다. 나는 두 개의 쿼리를 실행하고 결과를 병합하여 그것을 할 수 있지만 그 추한 것 한 번에 모든 결과에서 로딩이 필요합니다. 아니면이 (가) 먼 미래의 어떤 임의의 날짜에 시간이 만료 기본 수 있지만, 심지어 이보다 잠재적으로 부서지기 쉬운 것 같다. SQL에서 "(지금> = 만료 ()) 또는 (NULL이 만료)"와 난 그냥 그것을 표현했던 -하지만 난 몽고에서 그렇게하는 방법을 모르겠어요.

어떤 아이디어? 정말 감사합니다 사전에있다.

해결법

  1. ==============================

    1.그냥 내가 나중에이 페이지에 걸쳐있는 경우의 사람의 비틀 거림을 업데이트 할 거라고 생각했다. 1.5.3로, 지금은 몽고 진정한 $ 또는 연산자를 지원합니다 http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

    그냥 내가 나중에이 페이지에 걸쳐있는 경우의 사람의 비틀 거림을 업데이트 할 거라고 생각했다. 1.5.3로, 지금은 몽고 진정한 $ 또는 연산자를 지원합니다 http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

    귀하의 질의 해주기로 렌더링 할 수있다 "(만료> = NOW ()) OR (만료 NULL은 IS)"

    {$or: [{expires: {$gte: new Date()}}, {expires: null}]}
    
  2. ==============================

    2.경우 사람의 발견에 유용, www.querymongo.com 않는 SQL 및 MongoDB를 포함 OR 절 사이의 번역. 당신은 SQL 상응하는 알 때 구문을 파악 정말 도움이 될 수 있습니다.

    경우 사람의 발견에 유용, www.querymongo.com 않는 SQL 및 MongoDB를 포함 OR 절 사이의 번역. 당신은 SQL 상응하는 알 때 구문을 파악 정말 도움이 될 수 있습니다.

    또는 문장의 경우는 다음과 같습니다

    SQL :

    SELECT * FROM collection WHERE columnA = 3 OR columnB = 'string';
    

    MongoDB를 :

    db.collection.find({
        "$or": [{
            "columnA": 3
        }, {
            "columnB": "string"
        }]
    });
    
  3. ==============================

    3.쿼리 함께 기본 및 식으로 몽고에서 객체. 몽고는 현재 그러나 이러한 쿼리를 표현하는 방법이 있습니다, 이러한 쿼리에 대한 OR 연산자를 포함하지 않습니다.

    쿼리 함께 기본 및 식으로 몽고에서 객체. 몽고는 현재 그러나 이러한 쿼리를 표현하는 방법이 있습니다, 이러한 쿼리에 대한 OR 연산자를 포함하지 않습니다.

    "에서"사용 또는 "여기서".

    그 거 이런 식으로 뭔가 :

    db.mycollection.find( { $where : function() { 
    return ( this.startTime < Now() && this.expireTime > Now() || this.expireTime == null ); } } );
    
  4. ==============================

    4.db.Lead.find (

    db.Lead.find (

    {"name": {'$regex' : '.*' + "Ravi" + '.*'}},
    {
    "$or": [{
        'added_by':"arunkrishna@aarux.com"
    }, {
        'added_by':"aruna@aarux.com"
    }]
    }
    

    );

  5. ==============================

    5.이 인덱스를 사용할 수 없기 때문에 쿼리가 부분적으로 느려집니다 달러 (A $)를 사용. 문제는 이런 종류의, 나는 ()는 자연적으로 항상 지금보다 더 클 것 "만료"필드에 높은 값을 저장하기 위해 더 좋을 거라 생각합니다. 당신도 미래 년의 매우 높은 날짜 수백만 달러를 저장하거나 결코 나타 내기 위해 별도의 유형을 사용할 수 있습니다. 크로스 타입의 정렬 순서는 여기에서 정의된다.

    이 인덱스를 사용할 수 없기 때문에 쿼리가 부분적으로 느려집니다 달러 (A $)를 사용. 문제는 이런 종류의, 나는 ()는 자연적으로 항상 지금보다 더 클 것 "만료"필드에 높은 값을 저장하기 위해 더 좋을 거라 생각합니다. 당신도 미래 년의 매우 높은 날짜 수백만 달러를 저장하거나 결코 나타 내기 위해 별도의 유형을 사용할 수 있습니다. 크로스 타입의 정렬 순서는 여기에서 정의된다.

    빈 정규식 또는 MaxKey (당신의 언어 지원이있는 경우) 모두 좋은 선택입니다.

  6. from https://stackoverflow.com/questions/2008032/mongodb-query-with-an-or-condition by cc-by-sa and MIT license