MongoDBで文字列から最初の単語を重複なく取得する方法
MongoDBで文字列フィールドから最初の単語を抽出し、重複を排除して取得したい場合、distinct()メソッドとJavaScriptのmap()、split()を組み合わせることで実現できます。この記事では、具体的な手順をサンプルコードとともに解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは「distinctFirstWordDemo」というコレクションに学生のデータを挿入します。
> db.distinctFirstWordDemo.insertOne(
{
"_id": 100,
"StudentName":"John",
"StudentFeature": "John is a good player",
"Subject":"MongoDB"
}
);
{ "acknowledged" : true, "insertedId" : 100 }
> db.distinctFirstWordDemo.insertOne(
{
"_id": 101,
"StudentName":"Carol",
"StudentFeature": "Carol is not a good player",
"Subject":"MongoDB"
}
);
{ "acknowledged" : true, "insertedId" : 101 }上記のコマンドでは、2件のドキュメントが正常に挿入されました。それぞれのドキュメントには、学生名(StudentName)とその特徴を表す文章(StudentFeature)が格納されています。
登録したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.distinctFirstWordDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : 100,
"StudentName" : "John",
"StudentFeature" : "John is a good player",
"Subject" : "MongoDB"
}
{
"_id" : 101,
"StudentName" : "Carol",
"StudentFeature" : "Carol is not a good player",
"Subject" : "MongoDB"
}文字列から最初の単語を重複なく抽出するクエリ
それでは本題です。distinct()メソッドで「StudentFeature」フィールドの値を重複なく取得し、さらにmap()関数内でsplit(" ")[0]を使って各文字列の最初の単語だけを取り出します。
> student = db.distinctFirstWordDemo.distinct("StudentFeature", {"Subject" : "MongoDB"}).map(function(st){
return st.split(" ")[0];
});
[ "John", "Carol" ]
> printjson(student);このクエリのポイントは以下の通りです。
- distinct()メソッド: 指定したフィールドの値を重複なく配列として返します。第2引数で条件(ここではSubjectが「MongoDB」)を指定することも可能です。
- map()関数: 取得した配列の各要素に対して処理を適用します。
- split(" ")[0]: 文字列をスペースで分割し、配列の0番目(つまり最初の単語)を返します。
実行結果は以下のようになります。
[ "John", "Carol" ]
このように、「John is a good player」からは「John」、「Carol is not a good player」からは「Carol」がそれぞれ抽出され、重複のない最初の単語のリストとして取得できました。
まとめ
MongoDBでは、distinct()とmap()、split()を組み合わせることで、文字列フィールドから最初の単語を簡単に重複なく抽出できます。集計パイプライン($substrや$arrayElemAtなど)を使う方法もありますが、シェル上で手軽に処理したい場合は今回のようなアプローチが便利です。
-
【C++】文字列から最初のX個の母音を抽出して出力する方法
問題概要この問題では、サイズNの文字列str[]と整数Xが与えられます。求められているのは、文字列から最初のX個の母音を出力するプログラムを作成することです。文字列から見つかった最初のX個の母音を出力し、母音がX個未満しか存在しない場合は-1を出力します。具体例を使って問題を理解しましょう。入力: str = learn C programming language, X = 5 出力: e, a, o, a, i 母音とは a, e, i, o, u のことです解決アプローチこの問題に対するシンプルな解決策は、文字列を1文字ずつ先頭から走査する方法です。走査の過程で見つけたすべての母音を、結
-
C#でリスト内のすべての文字列から最初の3文字を取得する方法
この記事では、C#を使ってリストに格納されたすべての文字列から、先頭の3文字を抽出する方法を解説します。LINQのSelectメソッドとSubstringメソッドを組み合わせることで、簡潔に実装できます。 文字列リストの準備 まず、処理対象となる文字列をListに格納します。ここでは、以下のようなリストを用意しました。 List<object> list = new List<object> { keyboard, mouse, joystick, monitor }; SubstringとLINQ Selectで先頭3文字を取得する 各文字列の先頭3文字を取り出