mongodb - mongo复杂查询问题
我想大声告诉你
我想大声告诉你 2017-05-02 09:25:22
0
4
721

原json

{
    "_id" : ObjectId("58b3a8dc96fbc7cfb8287093"),
    "name" : "《地下水质量标准》",
    "GBNumber" : "GB/T 14848-93",
    "dataEntryClerk" : "handsomeboy",
    "lastModified" : "Fri Feb 27 2017 12:03:40 GMT+0800",
    "contents" : [ 
        {
            "standardID" : "9527-01",
            "unit" : "mg/L",
            "classifications" : [ 
                {
                    "level" : "I",
                    "upperLimit" : "0",
                    "lowerLimit" : "50"
                }, 
                {
                    "level" : "II",
                    "upperLimit" : "50",
                    "lowerLimit" : "150"
                }, 
                {
                    "level" : "III",
                    "upperLimit" : "150",
                    "lowerLimit" : "250"
                }, 
                {
                    "level" : "IV",
                    "upperLimit" : "250",
                    "lowerLimit" : "350"
                }, 
                {
                    "level" : "V",
                    "upperLimit" : "350",
                    "lowerLimit" : "-1"
                }
            ]
        }, 
        {
            "standardID" : "7439-89-6",
            "unit" : "mg/L",
            "classifications" : [ 
                {
                    "level" : "I",
                    "upperLimit" : "0",
                    "lowerLimit" : "0.1"
                }, 
                {
                    "level" : "II",
                    "upperLimit" : "0.1",
                    "lowerLimit" : "0.2"
                }, 
                {
                    "level" : "III",
                    "upperLimit" : "0.2",
                    "lowerLimit" : "0.3"
                }, 
                {
                    "level" : "IV",
                    "upperLimit" : "0.3",
                    "lowerLimit" : "0.4"
                }, 
                {
                    "level" : "V",
                    "upperLimit" : "0.5",
                    "lowerLimit" : "-1"
                }
            ]
        }
    ]
}

想查询出来的结果:

{
    "contents" : [ 
        {
            "standardID" : "9527-01",
            "unit" : "mg/L",
            "classifications" : [ 
                {
                    "level" : "I",
                    "upperLimit" : "0",
                    "lowerLimit" : "50"
                }, 
                {
                    "level" : "II",
                    "upperLimit" : "50",
                    "lowerLimit" : "150"
                }, 
                {
                    "level" : "III",
                    "upperLimit" : "150",
                    "lowerLimit" : "250"
                }, 
                {
                    "level" : "IV",
                    "upperLimit" : "250",
                    "lowerLimit" : "350"
                }, 
                {
                    "level" : "V",
                    "upperLimit" : "350",
                    "lowerLimit" : "-1"
                }
            ]
        }
    ]
}

请问下各位大牛db.xxx.find() 该怎么写呢

我想大声告诉你
我想大声告诉你

모든 응답(4)
刘奇

먼저 댓글을 남기고 싶습니다.

질문을 하고 재현 가능한 문제의 최소화된 예를 게시하세요. 이렇게 긴 문서를 게시하면 모두가 읽기에 지칠 것입니다.


실제로 필요한 것은 전체 배열이 아닌 배열의 일부 특정 문서를 반환하는 것입니다.

1 배열

에서 하나의 요소만 반환해야 하는 경우 으아악

첫 번째 줄은 쿼리 조건이고, 두 번째 줄은 필터 조건입니다. 필터 조건에서도 연산자를 사용할 수 있음을 알 수 있습니다. 그러나 이 연산자는 조건을 충족하는 첫 번째 요소만 반환하며 에는 MongoDB 버전 2.2 이상이 필요합니다.

또는 $ 아래 첨자 선택기를 사용하세요:

으아악

위 예시의 쿼리 조건도 사용할 수 있습니다$elemMatch.

배열에서 일치하는 여러 요소를 반환해야 하는 경우:

2 $unwind

$unwind을 사용하여 contents에서 독립적인 문서 스트림으로 작동합니다. 코드는 @bguo의 답변을 참조하세요.
그러나 어레이가 큰 경우 성능 문제가 발생할 수 있습니다.

3 $filter

이것은 3.2 버전의 새로운 연산자로, 반환된 콘텐츠를 필터링하는 데 사용됩니다.

으아악

물론 $redact(버전 2.6)이나 mapReduce() 및 기타 여러 방법을 사용할 수도 있습니다.

为情所困

쿼리 조건. 예를 들어 이름

으아악
给我你的怀抱

구현 방법 중 하나: MongoDB의 Aggregate를 사용합니다.

1. 먼저 배열이 포함된 내용에 $unwind를 적용합니다

2. 그런 다음 $match를 사용하여 필터링 조건을 적용합니다

3. 마지막으로 $project를 사용하여 필수 필드를 유지합니다

아래 코드 참고

으아악

참고로.

MongoDB를 사랑해주세요!

------------화려한 구분선------ --- ----------

MongoDB 중국어 커뮤니티에는 다양한 오프라인 활동이 있습니다. 아래를 클릭하세요.

2017 화산검 토론|MongoDB 중국 커뮤니티

3월 항저우역이 곧 다가옵니다! ! ! 관심있는 친구들은 빨리 신청해주세요! ! !

给我你的怀抱

으아악

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!