PyMongo 조회 데이터 의 실현

조회 데이터
mongodb 에 저 장 된 모든 데 이 터 는 읽 을 때 꺼 낼 수 있 도록 합 니 다.
그러나 읽 기 는 특정한 열 을 제외 하고 점수:정렬 읽 기;그리고 내 가 특정한 시간,특정한 반 의 조건 만 보고 선별 하 는 것 도 나타 날 것 이다.또 나 올 거 예요.반 당 평균 점수 집합 을 보고 싶 어 요.평균 을...등등 다양한 조작 을 하고 싶 어 요.
이 조작 들 은 모두 find 를 통 해one(),find()완료:

ret2find = collect.find_one()
# {'_id': ObjectId('5ea780bf747e3e128470e485'), 'class_name': '  (1) ', 'student_name': '  ', 'subject': '  ', 'score': 100, 'date': '20200301'}

ret2find = collect.find()
# <pymongo.cursor.Cursor object at 0x0000024BBEBE15C8>

위의 결 과 를 보면 findone()단일 사전 조회 하기;find()는 생 성기 대상 입 니 다.for val in ret2find:옮 겨 다 니 며 꺼 낼 수 있 습 니 다.
검색 조건 설정
그러나 모든 데 이 터 를 꺼 낼 수 있 는 것 도 부족 하 다.조 회 는 보통 조건 이 있 고 심지어 복잡 한 조건 이 있다.예 를 들 어 고 3(1)반,장삼 또는 이사,성적 이 90 보다 큰 과목 을 조회 하면 어떻게 해 야 합 니까?

ret2find = collect.find({"class_name":"  (1) ","score":{"$gt":90},"$or":[{"student_name":"  "},{"student_name":"  "}]})

for val in ret2find:
    print(val)
위 에 두 가지 요점 이 있다.
{"class_name":"고 3(1)반","score":{"$lt":90}}}
이 단락 의 문법 은'고 3(1)반 과 점수>90'을 나타 낸다.
그리고$lt 는 연산 자 를 비교 하고 표 는 뜻 보다 크 며$lt 연산 자 를 제외 하고 다음 과 같 습 니 다.
기호.
속뜻
$lt
...보다 작다
$lte
이하
$gt
...보다 크다
$gte
...보다 크다
$ne
같 지 않다
$in
범위 내 에서
$nin
범위 내 에 있 지 않다
{"$or":[{"student_name":"장삼"},{"studentname":"이사"}}}
이 단락 의 서법 은"학생 명칭 은 장삼 또는 이사"를 나타 낸다
그 중$or 논리 연산 자 는 조건 간 의 관 계 를 나타 낸다.$or 이외 의 논리 연산 자 는 다음 과 같 습 니 다:
기호.
속뜻
$and
조건 에 따라 교 집합 하 다
$not
단일 조건 의 반대 집합
$nor
여러 조건 의 반대 집합
$or
여러 조건 의 집합
더 많은 조회 조작
상기 일반적인 조작 을 제외 하고 구체 적 인 사용 장면 에서 우 리 는 다음 과 같이 사용 할 것 이다.
기호.
속뜻
예시
예시 적 함의
$regex
정규 일치
{"student_name":{"regex":".3"}}
학생
$expr
검색 에 집합 식 사용 허용
{"expr":{"gt":["spent","budget"]}}
예산 초과 지출 기록 조회
$exists
속성 존재 여부
{"date":{"$exists": True}}
날짜 속성 존재
$exists
속성 존재 여부
{"date":{"$exists": True}}
날짜 속성 존재
$type
유형 판단
{"score":{"$type":"int"}}
score 의 유형 은 int 입 니 다.
$mod
모형 추출 조작
{'score': {'$mod': [5, 0]}}
점수
더 많은 조회 조작 부 호 를 클릭 할 수 있 습 니 다공식 문서 보기
PS:pymongo 최대 검색 제한
pyhton 으로 mongo 데 이 터 를 옮 겨 다 닐 때 발송 한 도 를 101 줄 로 조회 하면 막 힙 니 다.다음 과 같 습 니 다.

    lista_a = []
    for info in db.get_collection("dbs").find():
        lista_a.append(info)
        print("info nums=",len(info))

'''    '''
'''info nums=101'''

분석 원인:mongodb 의 find()방법 은 커서 cursor 를 되 돌려 줍 니 다.제한 한도 값 101 이 있 을 수 있 습 니 다.참고 문 서 는 다음 과 같 습 니 다.
원문:
The MongoDB server returns the query results in batches. The amount of data in the batch will not exceed the maximum BSON document size. To override the default size of the batch, see batchSize() and limit().
New in version 3.4: Operations of type find(), aggregate(), listIndexes, and listCollections return a maximum of 16 megabytes per batch. batchSize() can enforce a smaller limit, but not a larger one.
find() and aggregate() operations have an initial batch size of 101 documents by default. Subsequent getMore operations issued against the resulting cursor have no default batch size, so they are limited only by the 16 megabyte message size.
For queries that include a sort operation without an index, the server must load all the documents in memory to perform the sort before returning any results.
번역:
MongoDB 서버 에서 검색 결 과 를 일괄 되 돌려 줍 니 다.일괄 처리 중인 데 이 터 는 최대 BSON 문서 크기 를 초과 하지 않 습 니 다.일괄 처리 의 기본 크기 를 덮어 쓰 려 면 batchSize()와 limit()를 참조 하 십시오.
새 버 전 3.4:find(),aggregate(),listIndexes,listCollections 의 동작 은 각각 최대 16 메가바이트 로 되 돌아 갑 니 다.batchSize()는 작은 제한 을 실행 할 수 있 지만 큰 제한 을 실행 할 수 없습니다.
find()와 aggregate()작업 의 초기 일괄 처리 크기 는 기본적으로 101 개의 문서 입 니 다.생 성 된 커서 에 대한 후속 getMore 작업 은 기본 일괄 처리 크기 가 없 기 때문에 16mb 메시지 크기 만 제 한 됩 니 다.색인 이 없 는 정렬 작업 을 포함 하 는 조회 에 대해 서버 는 결 과 를 되 돌려 주기 전에 메모리 에 있 는 모든 문 서 를 불 러 와 정렬 해 야 합 니 다.
해결 방안

    lista_a = []
    for info in db.get_collection("dbs").find().batch_size1(5000): #       
        lista_a.append(info)
        print("info nums=",len(info))
그러나 이 방법 은 매번 커서 가 5000 개의 데 이 터 를 되 돌려 반복 하 는 것 이다.단 어 를 50000 번 찾 으 면 어떻게 써 야 할 까?아래 와 같다

   lista_a = []
   cousor=db.get_collection("dbs").find().batch_size1(5000)
    for i in range(50000): #       
        lista_a.append(next(cousor))
이로써 PyMongo 조회 데이터 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 PyMongo 조회 데이터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기