MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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など)を使う方法もありますが、シェル上で手軽に処理したい場合は今回のようなアプローチが便利です。

  1. 【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文字ずつ先頭から走査する方法です。走査の過程で見つけたすべての母音を、結

  2. C#でリスト内のすべての文字列から最初の3文字を取得する方法

    この記事では、C#を使ってリストに格納されたすべての文字列から、先頭の3文字を抽出する方法を解説します。LINQのSelectメソッドとSubstringメソッドを組み合わせることで、簡潔に実装できます。 文字列リストの準備 まず、処理対象となる文字列をListに格納します。ここでは、以下のようなリストを用意しました。 List<object> list = new List<object> { keyboard, mouse, joystick, monitor }; SubstringとLINQ Selectで先頭3文字を取得する 各文字列の先頭3文字を取り出