MongoDBで文字列から一意な先頭の単語を取得する方法
MongoDBで文字列フィールドから一意な(重複しない)先頭の単語を抽出したい場合、distinct() メソッドと JavaScript の split() を組み合わせることで簡単に実現できます。
サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成しましょう。insertOne() メソッドを使ってドキュメントを挿入します。
> db.demo129.insertOne({"Words":"This is the MySQL","CountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e305d6368e7f832db1a7f6b")
}
> db.demo129.insertOne({"Words":"MongoDB is NOSQL database","CountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e305d7b68e7f832db1a7f6c")
}登録済みドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo129.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e305d6368e7f832db1a7f6b"), "Words" : "This is the MySQL", "CountryName" : "US" }
{ "_id" : ObjectId("5e305d7b68e7f832db1a7f6c"), "Words" : "MongoDB is NOSQL database", "CountryName" : "US" }文字列から一意な先頭の単語を取得するクエリ
それでは、文字列内の先頭の単語だけを重複なく取り出すクエリを見てみましょう。ポイントは以下の手順です。
distinct("Words", {"CountryName": "US"})で条件に一致する「Words」フィールドの値を重複なしで取得するmap()内でsplit(" ")[0]を使い、各文字列をスペースで分割して最初の要素(先頭の単語)を返す
> w = db.demo129.distinct("Words", {"CountryName" : "US"}).map(function(doc){ return doc.split(" ")[0]; });
[ "This", "MongoDB" ]結果を見やすく表示する
取得した結果は、printjson() を使って整形された形式で表示できます。
> printjson(w);
実行結果は次のとおりです。
[ "This", "MongoDB" ]
このように、distinct() と split() を組み合わせれば、MongoDBのコレクションから文字列の先頭にある単語だけを効率よく抽出できます。文章データの分析や集計処理などで活用できる便利なテクニックなので、ぜひ覚えておきましょう。
-
MySQLで数字を含む文字列を正しく並べ替える方法(ORDER BY・SUBSTR・CAST活用)
はじめにMySQLでは、文字列型のカラムに「A10」「A30」のような数字が混ざったデータが格納されている場合、通常の ORDER BY だけでは文字コード順にソートされるため、「A10、A11、A12…」という数値として自然な順序になりません。この問題を解決するには、ORDER BY 句と SUBSTR() 関数、さらに CAST() 関数を組み合わせます。以下がその基本構文です。SELECT * FROM yourTableName ORDER BYSUBSTR(yourColumnName FROM 1 FOR 2),CAST(SUBSTR(yourColumnName FROM 2)
-
PHPで「…」を使って文字列を短縮表示する方法
PHPでは、長い文字列の先頭と末尾だけを残して中間を省略し、「…」でつなげて表示したいケースがあります。例えば、記事の一覧画面などで概要をコンパクトに見せたい場合に便利なテクニックです。処理の対象となる文字列まず、次のような文字列を用意します。$sentence=This is my first PHP program;期待する出力結果この文字列から、先頭部分と末尾部分を残して短縮した結果、以下のように表示させます。This is my first PHP ... gram実装の考え方文字列を「…」で短縮するには、strlen()関数で文字列の長さをチェックし、一定の長さ以上であればsubst