如何查询mongodb以查找特定字符串/文本字段的长度?另外你如何找到查询集的最大长度?在mongodb中选择字符串长度
8
A
回答
4
天空是极限!不,实际上它是16 MB
作为mongodb
中的文档。这可以是记录中字符串的最大长度。
为了找到查询集的最大长度,你可以四处做这项工作:
- 与文本本身保持文本的长度在一起。
- 按照长度降序对结果集进行排序。
- 获取具有最大长度的第一个元素。
5
不幸的是,aggregation framework不支持在执行查询时自动将字符串转换为其长度的“len”运算符。所以你必须在你自己的代码中解决这个问题。你可以
- 使用MapReduce的函数来计算字符串长度
- 查询字符串,并计算应用层上它们的长度
这些方法之间的区别是数据库上的第一次运行而后者在你的应用服务器上运行。我会推荐后一种选择,因为MapReduce的使用速度可能非常慢并且很麻烦。
-1
与SQL不同,MongoDB并不真正知道字段的长度。它至多在索引时知道该字段不在1024字节之内。
因此,您可能必须修复客户端。你可以在这里使用$where
,但如果你想这样做,我认为你看着这个错误。
你也可以在@Philipp使用和MR在这里,但是你也可能会在这里看到错误的东西。
MongoDB中的查询实际上是一个BSON文档。因此,查询集的最大长度(取决于您定义的“查询集”)总是16MB(目前)。
许多驱动程序提供了一种方法来将结构(散列或字典或其他)编码为BSON,从而允许您判断编码字符串的长度以了解查询的大小。
2
如何使用正则表达式代替。
> db.apps.find({$where:"(this.id.length gt 6) && (this.id.length lt 15) " }).count(); 2548 > db.apps.find({$where:" (this.id.length gt 6) && (this.id.length lt 15) " }).explain(); { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 2548, "nscannedObjects" : 88736, "nscanned" : 88736, "nscannedObjectsAllPlans" : 88736, "nscannedAllPlans" : 88736, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 1, "nChunkSkips" : 0, "millis" : 1523, "indexBounds" : { }, "server" : "shuhaimac.local:27017" }
> db.apps.find({id:/\w{7,16}/i}).count(); 2548 > db.apps.find({id:/\w{7,16}/i}).explain(); { "cursor" : "BtreeCursor id_1 multi", "isMultiKey" : false, "n" : 2548, "nscannedObjects" : 2548, "nscanned" : 88736, "nscannedObjectsAllPlans" : 2548, "nscannedAllPlans" : 88736, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 122, "indexBounds" : { "id" : [ [ "", { } ], [ /\w{7,16}/i, /\w{7,16}/i ] ] }, "server" : "shuhaimac.local:27017" }
1
所以,我希望这有助于。 :-)我遇到了同样的问题 - 花了一段时间才让map-reduce工作。
$response = $Mongo->yourdb->command(array(
"mapreduce" => "yourcollection",
"map" => new MongoCode(" function() { emit(this.groupbykey, this.thestring.length); } "),
"reduce" => new MongoCode(" function(k, vals) { return Math.max.apply(null, vals); } "),
"query" => array("groupbykey" => "somevalue"),
"out" => array("inline" => 0)
));
响应将持有的map-reduce结果
Array
(
[results] => Array
(
[0] => Array
(
[_id] => groupbykeyvalue
[value] => 106
)
)
[counts] => Array
(
[input] => 7341
[emit] => 7341
[reduce] => 76
[output] => 1
)
[timeMillis] => 189
[timing] => Array
(
[shardProcessing] => 171
[postProcessing] => 17
)
[shardCounts] => Array
(
[someshard:27017] => Array
祝你好运,让我知道如果你需要一个不同的变种!
相关问题
- 1. ARel按字符串长度选择行
- 2. MongoDB的性能:字符串长度
- 3. 字符串的长度比字符串的长度长
- 4. Linq OrderBy字符串属性长度必须在选择列表
- 5. 在MySQL汽车CONCAT字符串的长度如何选择
- 6. MongoDB中如何与长字符串键
- 7. 按c选择排序字符串的长度c
- 8. 根据两列的字符串长度选择行
- 9. 选择长度最多为n的均匀随机字符串?
- 10. MySQL选择匹配字符串的最大长度
- 11. MySQL - 如何通过字符串长度选择数据
- 12. 选择仅包含三个字符长度的字母字符串
- 13. 在JS中获取字符串长度
- 14. 在PHP中检查字符串长度
- 15. 在StringWriter中获取字符串长度?
- 16. 在指定长度的子字符串中拆分字符串
- 17. 如何在固定长度字符串中对齐字符串
- 18. 从不在另一个表中的行选择字符串长度
- 19. xslt中字符串的字节长度
- 20. C字符串长度
- 21. bash的字符串长度
- 22. 比较字符串长度
- 23. CSS字符串长度
- 24. PHP字符串长度
- 25. 限制字符串长度
- 26. Haskell和字符串长度
- 27. 字符串长度问题
- 28. SQLite soundex字符串长度
- 29. 数字符串长度c
- 30. 比较字符串长度
这简直是不真实的:MongoDB绝对知道字符串的长度,它是类型字符串的bson规范的一部分,前4个字节是字符串的长度。没有运营商允许您查询。 –
@AsyaKamsky在写这篇文章之前,应该先检查一下规范 – Sammaye