特定の文字列/テキストフィールドの長さを検索するにはどのようにmongodbをクエリしますか?さらに、クエリセットの最大長はどのように見えますか?mongodbの文字列の長さを選択してください
答えて
空が限界です!いいえ、実際にはmongodb
の文書の場合は16 MB
です。これは、レコード内の文字列の最大長にすることができます。
問合せセットで最大の長さを見つけるために、あなたの周り、この作業を行うことができます。
- テキスト自体と一緒にテキストの長さにしてください。
- 結果セットを長さに応じて降順に並べ替えます。
- 最大長を持つ最初の要素を取得します。
残念ながら、aggregation frameworkでは、クエリ実行中に自動的に文字列を長さに変換する "len"演算子はサポートされていません。したがって、あなた自身のコードでこれを解決する必要があります。あなたは
- 使用のMapReduce関数は、文字列は、文字列の
- クエリを長計算し、アプリケーション層の上にその長さを計算することができ
これらの方法の違いは、データベース上の最初の実行後者はアプリケーションサーバー上で動作します。 MapReduceは非常に遅くて扱いにくいので、後者のオプションをお勧めします。
SQL MongoDBとは異なり、フィールドの長さは実際には分かりません。索引付けするときは、フィールドが1024バイト以下かどうかを知ることがほとんどです。
このように、これはおそらくクライアント側を修正する必要があります。ここでは$where
を使うことができますが、もしあなたがそれをしたいのであれば、あなたはこれを間違って見ていると思います。
ここでもMRを@Philippの州として使うことができますが、ここでもおそらく間違ったことを考えています。
MongoDBのクエリは、実際にはBSONドキュメントです。したがって、クエリセットの最大長( "クエリセット"として定義するものに依存します)は、常に16MBです(現時点では)。
多くのドライバは、構造体(ハッシュまたはdictなど)をBSONにエンコードする手段を提供し、エンコードされた文字列の長さを判断してクエリのサイズを理解できるようにします。
代わりに正規表現を使用してください。
> 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" }
だから、私はこのことができます願っています。 :-)私は同じ問題に遭遇しました - そして、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)
));
応答は、さまざまなバリエーションが必要な場合は私に知らせて、幸運
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. Androidのstrings.xmlからランダムに文字列を選択してください
- 2. mongodbパフォーマンス:文字列の長さ
- 3. REGEX:特定の文字列と等しくないものをすべて選択してください
- 4. MySQL - 列+ Xの列を選択してください
- 5. Slick:選択していない列を選択してください
- 6. PL/SQL - 列の値を文字列配列として選択してください
- 7. SQL文 - このクエリの逆を選択してください
- 8. Linqグループの特定の列を選択してください。
- 9. DISTINCTを選択してください。
- 10. CASE文のエラーを選択してください
- 11. コマンドパラメータの選択を選択してください
- 12. PostgreSQL:単列xの量を選択してください
- 13. MySQL特定の列を選択してください
- 14. Asp.Netで選択してください
- 15. から選択してください
- 16. DOMで選択してください
- 17. Qtコンテナ - 選択してください。
- 18. ランダムに選択してください
- 19. Angularjs選択した項目を選択してください。
- 20. MongoDB C#Queryドキュメントから特定のキーを選択してください。
- 21. Mongodb:各グループの上位N行を選択してください
- 22. 最後の文字列(PowerShell)以外のすべての単語を選択してください
- 23. "有効な選択肢を選択してください。"ジャンゴ
- 24. 一致する列を選択してください
- 25. 2列を除くすべての行を選択してください
- 26. Python:XLRD;列の長さを比較してください
- 27. データベースからの文字列のハッシュタグ部分のみを選択してください。
- 28. ただ1つのチェックボックスを選択してください
- 29. Java文字列の\ F \を置換してください
- 30. 文字列の書式を確認してください
これは単に真実ではありません。MongoDBは文字列の長さを絶対に知っています。これはタイプ文字列のbson仕様の一部です。最初の4バイトは文字列の長さです。あなたがそれを照会できる演算子はありません。 –
@AsyaKamskyフェアそれを書く前に十分に仕様をチェックしておいたはずです – Sammaye