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 조회 데이터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단 한 MyBatis 가 Oracle 데이터 베 이 스 를 연결 하 는 예오늘 은 MyBatis 를 배 웠 고 간단 한 자바 응용 프로그램 을 써 서 MyBatis 를 통 해 Oracle 데이터 베 이 스 를 연결 했다. 제 컴퓨터 운영 체제 버 전 은 Win 7 플래그 십 버 전 (Se...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.