MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Số lượng tham số tối đa được truyền đến $ trong truy vấn trong MongoDB là bao nhiêu?

Bản thân truy vấn là một tài liệu . MongoDB giới hạn kích thước tài liệu (kể từ phiên bản 2.4.0+) là 16 MB.

Thực sự, những gì bạn đang làm với một kết quả là:

db.collectionName.find(queryDoc)

trong đó 'queryDoc' là một cái gì đó giống như:

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

Để tìm số giá trị tối đa bạn có thể chuyển cho truy vấn $ in, hãy sử dụng bsonsize lệnh:

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

Vì vậy, bạn có thể thấy rằng mọi số nguyên bổ sung có kích thước 11 byte. Không phải 11 bit, 11 BYTES. Điều này là do cách BSON lưu trữ nội bộ các số dưới dạng ít nhất 64 bit mỗi số, cộng với trình bao bọc. Có thể dễ dàng nhận thấy điều này với:

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

Vì vậy, bất kể kích thước của một số riêng lẻ là bao nhiêu, nó đều có cùng kích thước.

Tự trả lời câu hỏi:Tài liệu truy vấn đó lớn đến mức nào?

Thêm những điều này cho một truy vấn trường với mệnh đề $ in, trong pymongo, thông qua lời nhắc javascript mongos, bất cứ điều gì, tất cả các bạn đều xây dựng các dữ kiện bổ sung giống nhau cho kích thước tối đa của một truy vấn $ in:

mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
  • Bản thân tài liệu truy vấn là 22 byte;
  • Mỗi byte của tên trường thêm một byte duy nhất;
  • Mỗi số được thêm vào mệnh đề $ in sẽ thêm 11 byte.

Vì vậy, giả sử bạn có tên trường một byte (thực sự là tối thiểu), thì giá trị tối đa của bạn là:

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

CÂU TRẢ LỜI:1,525,198 (Đó là 1,5 triệu. Đó là khá lớn.)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB ánh xạ / giảm bớt qua nhiều bộ sưu tập?

  2. Không thể kết nối với MongoDB (MongoLabs) qua ứng dụng khách C #

  3. Cập nhật tài liệu trong MongoDB

  4. Mongodb / mongoose insert không phải là một hàm

  5. Cách xác định đối tượng trong mảng trong lược đồ Mongoose một cách chính xác với chỉ mục địa lý 2d