MongoDBでオブジェクト配列から一意な値を取得する方法
MongoDBでオブジェクト配列から重複を除いた一意な値を取得したい場合は、distinct() メソッドを使用します。このメソッドは、指定したフィールドに含まれる値の中から重複を排除したリストを返してくれるため、配列内の特定フィールドだけを抽出したい場合に非常に便利です。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは demo442 というコレクションに、Information というオブジェクト配列を持つドキュメントを挿入します。
> db.demo442.insertOne(
... {
... "Information" : [
... {
... "FirstName" : "John",
... "Age" : 21
... },
... {
... "FirstName" : "Sam",
... "Age" : 23
... },
... {
... "FirstName" : "John",
... "Age" : 24
... },
... {
... "FirstName" : "Carol",
... "Age" : 20
... },
... {
... "FirstName" : "Sam",
... "Age" : 22
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e78cf29bbc41e36cc3caeb8")
}登録したドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo442.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e78cf29bbc41e36cc3caeb8"), "Information" : [ { "FirstName" : "John", "Age" : 21 }, { "FirstName" : "Sam", "Age" : 23 }, { "FirstName" : "John", "Age" : 24 }, { "FirstName" : "Carol", "Age" : 20 }, { "FirstName" : "Sam", "Age" : 22 } ] }このデータを見ると、FirstName フィールドには「John」や「Sam」が複数回登場していることがわかります。
distinct() で一意な値を取得する
オブジェクト配列内のフィールドに対して一意な値を取得するには、ドット記法(Information.FirstName)でパスを指定して distinct() を呼び出します。
> db.demo442.distinct("Information.FirstName");実行結果は以下のとおりです。
[ "Carol", "John", "Sam" ]
まとめ
このように、distinct() メソッドに「配列名.フィールド名」という形式でパスを渡すことで、MongoDBは自動的に配列内を走査し、重複を排除した値のリストを返します。今回の例では、5つの要素があった Information 配列から、一意な名前である「Carol」「John」「Sam」の3つの値だけが取得できました。
なお、条件を絞り込みたい場合は、distinct() の第2引数にクエリを渡すことも可能です。例えば年齢が22歳以上のドキュメントに限定して一意な名前を取得するといった使い方ができるので、実際の開発でもぜひ活用してみてください。
-
MongoDBで配列から複数の値を一括削除する方法:$pull演算子とmultiオプションの使い方
配列から値を取り除く(プルする)には、$pull 演算子を使用し、multi: true を設定します。multi オプションを有効にすることで、条件に一致したすべてのドキュメントに対して同時に更新を適用できます。本記事では、実際にコレクションを作成し、$pull を使って複数のドキュメントの配列から特定の値を一括削除する手順を解説します。サンプルコレクションの作成まずは、ドキュメントを含むコレクションを作成しましょう。> db.demo392.insertOne( ... { ... Name: Chris, ... details: [ ...
-
MongoDBのオブジェクト配列からアイテムを取得する方法
MongoDBでオブジェクト配列からアイテムを取得するには?MongoDBのドキュメント内にネストされたオブジェクト配列から特定のアイテムを取り出したい場合は、aggregate()メソッドを使用します。集計パイプラインの各ステージを組み合わせることで、配列の展開・絞り込み・集約を柔軟に行えます。まずは、サンプルコレクションにドキュメントを作成してみましょう。> db.demo459.insertOne( ... { _id : 1, ... Information : [ ... { ... Name : Chris, ... _id : new O