特定の文字列/テキスト フィールドの長さを見つけるために mongodb にクエリを実行するにはどうすればよいですか?
また、クエリ セットの最大長はどのようにして確認できますか?
特定の文字列/テキスト フィールドの長さを見つけるために mongodb にクエリを実行するにはどうすればよいですか?
また、クエリ セットの最大長はどのようにして確認できますか?
残念ながら、集計フレームワークは、クエリの実行中に文字列をその長さに自動的に変換する「len」演算子をサポートしていません。したがって、これを独自のコードで解決する必要があります。あなたは出来る
これらの方法の違いは、前者はデータベースで実行され、後者はアプリケーションサーバーで実行されることです。MapReduceは非常に遅く、使用が面倒な場合があるため、後者のオプションをお勧めします。
空は限界です!いいえ、実際には16 MB
のドキュメント用ですmongodb
。これは、レコード内の文字列の最大長になる場合があります。
クエリ セットの最大長を見つけるには、次の回避策を実行できます。
からMongo 3.4
、$strLenCP
集計演算子を使用して文字列の長さを取得できます。
// { a: "Hello World" }
// { a: "42" }
// { a: "Hello World!" }
db.collection.aggregate([{ $addFields: { length: { $strLenCP: "$a" } } }])
// { a: "Hello World", length: 11 }
// { a: "42", length: 2 }
// { a: "Hello World!", length: 12 }
$group
/$max
ステージを介してすべてのドキュメントから最大長を取得するには、次のようにします。
db.collection.aggregate([
{ $group: { _id: null, longest: { $max: { $strLenCP: "$a" } } } }
])
// { "_id" : null, longest: 12 }
だから、これが役立つことを願っています。:-) 私は同じ問題に遭遇しました。
$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
頑張ってください。別のバリエーションが必要な場合はお知らせください。
SQL MongoDB とは異なり、フィールド自体の長さは実際にはわかりません。せいぜい、インデックスを作成するときに、フィールドが 1024 バイト未満であるかどうかを認識します。
そのため、これはおそらくクライアント側を修正する必要があるものです。ここでa を使用できます$where
が、それを行いたい場合は、これを間違っていると思います。
@Philippが述べているように、ここでand MRを使用することもできますが、ここでも間違ったことを調べている可能性があります。
MongoDB のクエリは、実際には BSON ドキュメントです。そのため、クエリ セットの最大長 (「クエリ セット」として何を定義するかによって異なります) は、(現時点では) 常に 16MB です。
多くのドライバーは、構造 (ハッシュや辞書など) を BSON にエンコードする手段を提供し、エンコードされた文字列の長さを判断してクエリのサイズを理解できるようにします。