복붙노트

[MONGODB] MongoDB를 $ 또는 쿼리

MONGODB

MongoDB를 $ 또는 쿼리

나는 몽고 쉘에서 쿼리를 다음 실행

db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )

(JSON) 예상대로 그냥 아무 것도 반환하지 않습니다?

해결법

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

    1.질문에서 쿼리를 들어,에 $를 사용하는 것이 더 적절한입니다

    질문에서 쿼리를 들어,에 $를 사용하는 것이 더 적절한입니다

    db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
    

    누락 된 따옴표가있다 - 당신이 당신 또는 두 번째 부분을 완료하기위한 CLI가 기다리고 있습니다 :

    db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
    ..............................................................^
    

    그 다음 구문 오류가있어 말의 CLI는 구문 분석을 위해 당신은 충분히 쿼리를 완료해야합니다.

    당신은 대소 문자를 구분 방식으로 검색 할 경우, 댓글로 표시로서 다음 중 하나를 $ 또는 $ 정규식과를 사용 :

    db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
    

    또는, 당신은 단순히 하나 개의 정규 표현식을 사용합니다 :

    db.Profiles.find ( { "name" : /^(gary|rob)/i } )
    

    그러나 인덱스를 사용할 수없는 고정 된 문자열로 시작하지 않는 정규식 쿼리 (이 인덱스를 사용할 수 없습니다 효과적으로 "일치하는 다음 보석을 발견 할 때까지 여기에서 시작"않음) 따라서 하위 최적입니다. 이 귀하의 요구 사항 인 경우, 정규화 된 이름 필드를 저장 (예를 들어, name_lc - 소문자 이름) 더 좋은 생각이 그와 쿼리 :

    db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );
    
  2. from https://stackoverflow.com/questions/14534984/mongodb-or-query by cc-by-sa and MIT license