복붙노트

[MONGODB] MongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까?

MONGODB

MongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까?

MongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까?

해결법

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

    1.쿼리 자체는 문서입니다. MongoDB를은 (2.4.0+ 버전 등) 16메가바이트에 문서 크기를 제한합니다.

    쿼리 자체는 문서입니다. MongoDB를은 (2.4.0+ 버전 등) 16메가바이트에 문서 크기를 제한합니다.

    정말, 무엇을 당신이 발견으로하고있는 것은 :

    db.collectionName.find(queryDoc)
    

    여기서 'queryDoc는'같은 것입니다 :

    { 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
    

    당신이 쿼리에 $에 전달할 수있는 값의 최대 수를 찾으려면 bsonsize 명령을 사용합니다 :

    mongos> Object.bsonsize([1])
    16
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4] } })
    74
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5] } })
    85
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6] } })
    96
    

    그래서, 당신은 모든 추가 정수의 크기는 11 바이트입니다 것을 볼 수 있습니다. 아니 11 비트, 11 BYTES. 이는 방법이고, 적어도 64 비트를 각각 더한 래퍼 BSON 내부 저장 번호. 이 쉽게로 볼 수 있습니다 :

    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 690000000000000000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000000000] } })
    107
    mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000000000] } })
    107
    

    그래서, 어떤 개인 번호의 크기, 그것은 같은 bsonsize 무슨 상관 없습니다.

    큰 그 쿼리 문서입니다 방법 : 질문 자체에?

    쿼리에 $의 최대 크기에 mongos 자바 스크립트 프롬프트, 무엇이든, 모든 yeild이 같은 추가 사실을 통해, pymongo에, 절에 $와 1 개 필드 쿼리에 대해 다음을 추가 :

    mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
    34
    mongos> Object.bsonsize({ '' : { '$in' : [1] }})
    33
    mongos> Object.bsonsize({ '' : { '$in' : [] }})
    22
    

    그래서, 당신을 가정하면, 최대이다 (정말, 최소) 1 바이트 필드 이름이 :

    mongos> 16*1024*1024
    16777216
    mongos> (16*1024*1024) - 22 - 1 
    16777193
    mongos> ((16*1024*1024) - 22 -1) / 11
    1525199.3636363635
    

    대답은 : 1525198 (즉 150 만있어 그것은 꽤 큰입니다..)

  2. ==============================

    2.제한이없는 것 같습니다.

    제한이없는 것 같습니다.

    나는 작은 시험을했다.

    1) 컬렉션 A는했다 - 1 백만 간단한 JSON 객체 {ID를 : 이름 :}

    나는 다음과 같은 예외를 가지고까지 2)에서 수집 B, I는 수집 A의 참조 ID를로드. 나는 최대의 450K의 참조 카운트를 삽입 할 수 있습니다.

    Exception in thread "main" com.mongodb.MongoInternalException: DBObject of size 18388885 is over Max BSON size 16777216
    

    3) 나는 [ID1 ... id450000]에 $ 이러한 ID의 450K 보내고 수집 A. 1 백만 객체에서 450K ID의 전체 목록을 당길 수

    와! 이 내 응용 프로그램에 대한 더 많은 더 이상 충분입니다 : D. MongoDB를 정말 멋지다.

  3. ==============================

    3.나는 제한이 단지 BSONDocument의 크기에 의해 결정된다 생각합니다. 쿼리를 정의 할 때, 당신은 당신이 최대 문서 크기를 초과 할 때까지 절까지에 $에 값을 계속 추가 할 수 있습니다. 그래서 당신이 절에서 할 수 있습니다 얼마나 많은 값을 각 값이 얼마나 큰지에 따라 (각 값의 작은 크기, 더는 절에 $에 포함 할 수 있습니다).

    나는 제한이 단지 BSONDocument의 크기에 의해 결정된다 생각합니다. 쿼리를 정의 할 때, 당신은 당신이 최대 문서 크기를 초과 할 때까지 절까지에 $에 값을 계속 추가 할 수 있습니다. 그래서 당신이 절에서 할 수 있습니다 얼마나 많은 값을 각 값이 얼마나 큰지에 따라 (각 값의 작은 크기, 더는 절에 $에 포함 할 수 있습니다).

    성능의 측면에서, 내가 찾은 것과, 절에 $에있는 값의 개수에 대해 "스위트 스폿 (sweet spot)"이있다. 이 관련 질문에 내 대답을 참조하십시오 : 그것은 요청 당 MongoDB를 여러 번 쿼리 할 OK인가?

    즉, 쿼리의 수를 전송 대 절에 $의 값의 수를 균형. 좀 더 구체적으로 블로그 시도하는 것을에 게시 및 다이빙 중순 방법입니다.

  4. from https://stackoverflow.com/questions/5331549/what-is-the-maximum-number-of-parameters-passed-to-in-query-in-mongodb by cc-by-sa and MIT license