在MongoDB查询中传递给$的参数的最大数量是多少?
回答
看起来没有限制。
我做了一个小测试。
1)集合将有 - 1个百万简单的JSON对象{ID:姓名:}
2)在集合B中,我装集合A的参考IDS,直到我得到了以下异常。我可以插入最大值为450k的引用计数。
Exception in thread "main" com.mongodb.MongoInternalException: DBObject of size 18388885 is over Max BSON size 16777216
3)我可以在[ID1 ... id450000]发送这些ID为$ 45万的在收集A.从1个亿个对象拉450K ID的整个列表
哇!这对我的应用程序来说更加绰绰有余:D。 MongoDB真的很酷。
+1有趣的实验 – Danimal 2011-03-21 23:57:31
我认为这个限制是由BSONDocument的大小决定的。定义查询时,您可以继续向$ in子句中添加值,直到超过最大文档大小。因此,在子句中可以有多少值取决于每个值的大小(每个值的大小越小,可以包含在$ in子句中的越多)。
就性能而言,从我发现的结果来看,$ in子句中值的数量有一个“最佳点”。请参阅我在此相关问题中的回答:Is it OK to query a MongoDB multiple times per request?
即平衡$ in子句中值的数量与发送查询的数量。我正在通过一篇博客文章的中途尝试并深入了解更多细节。
查询本身是一个文件。 MongoDB将文档大小(从版本2.4.0+开始)限制为16 MB。
真的,什么你和一个发现做的是:
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。这是由于BSON内部存储数字的方式,每个数字至少为64位,外加封装。这可以很容易地看到:
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。
对问题本身:查询文档有多大?
加上这些与在第一个$一个字段查询,请在pymongo,通过mongos JavaScript的提示,不管,一切一代产量为$的最大大小相同的另外的事实查询:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- 查询文件本身是22个字节;
- 字段名称的每个字节都添加一个字节;
- 添加到$ in子句中的每个数字都会添加11个字节。
所以,假设你有一个字节的字段名(最小,真的),您最大的是:
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1)/11
1525199.3636363635
答案:(。这是150万这是相当大的)1525198
- 1. 多查询中查询的最大数量是多少?
- 2. 在MySQL中传递给IN()的项目的最大数量是多少
- 3. 传递给cassandra列的数据的最大长度是多少
- 4. 在查询中可以传递给MongoDB'$ in'操作符的数组元素的数量限制是多少?
- 5. 可通过意图传递的最大数据量是多少?
- 6. 将数组传递给查询参数
- 7. 将可变数量的参数传递给sql查询
- 8. 将多个查询参数传递给restful api的最佳方式是什么?
- 9. MongoDB可以拥有的最大分片数量是多少?
- 10. UNNotificationActions的最大数量是多少?
- 11. django查询多个表 - 将参数传递给查询
- 12. 将大量参数传递给struct.pack
- 13. C++中递归调用的最大数量级的数量级是多少?
- 14. 将查询参数传递给mapserver中的查询语句
- 15. mongodb查询的最大长度是多少?
- 16. 在MongoDB中传递参数$
- 17. 传递给函数的参数数量?
- 18. 将SSRS参数传递给SQL查询
- 19. JDBC参数传递给SQL查询
- 20. 将参数传递给DAX查询
- 21. 将查询参数传递给SSIS
- 22. 将参数传递给子查询
- 23. 将参数传递给子查询
- 24. MySQL将参数/值传递给查询
- 25. 将参数传递给ESPER EPL查询?
- 26. 将dummy参数传递给SQL查询
- 27. 可以存储在MongoDB集合中的文档的最大数量是多少?
- 28. 您可以传递给Wininet函数HttpOpenRequest的最大URL长度是多少?
- 29. 如何减少传递给主体的参数数量
- 30. 我通过jquery ajax的查询字符串传递的最大数据量是多少?
我在某处读到它是1 000 000. – oyatek 2012-01-28 12:55:35
请参阅下面的实际计算并显示工作。 – 2013-08-28 18:26:20