MongoDBで値を配列として返す方法:$groupと$addToSetによる戻り値形式の指定
MongoDBで複数のドキュメントから取得した値を1つの配列として返したい場合は、集計(Aggregation)フレームワークを使用します。$groupステージと$addToSet演算子を組み合わせることで、各ドキュメントのフィールド値を重複なく1つの配列にまとめることができます。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.specifyReturnFormatDemo.insertOne({"Subject":"MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefd364ef71edecf6a1f6c0")
}
> db.specifyReturnFormatDemo.insertOne({"Subject":"MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefd369ef71edecf6a1f6c1")
}
> db.specifyReturnFormatDemo.insertOne({"Subject":"SQL Server"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefd36fef71edecf6a1f6c2")
}登録されたドキュメントの確認
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.specifyReturnFormatDemo.find();
出力
{ "_id" : ObjectId("5cefd364ef71edecf6a1f6c0"), "Subject" : "MongoDB" }
{ "_id" : ObjectId("5cefd369ef71edecf6a1f6c1"), "Subject" : "MySQL" }
{ "_id" : ObjectId("5cefd36fef71edecf6a1f6c2"), "Subject" : "SQL Server" }戻り値を配列形式で指定するクエリ
以下が、戻り値の形式を配列として指定するクエリです。$groupで「_id: 0」を指定することですべてのドキュメントを1つのグループにまとめ、$addToSetによってSubjectフィールドの値を配列に収集しています。最後に$projectで「_id」を除外し、Subjectのみを出力しています。
> db.specifyReturnFormatDemo.aggregate([
{
"$group": {
"_id": 0,
"Subject": {
"$addToSet": "$Subject"
}
}
},
{
"$project": {
"_id": 0,
"Subject": 1
}
}
]);出力
{ "Subject" : [ "SQL Server", "MySQL", "MongoDB" ] }このように、$groupと$addToSetを活用すれば、MongoDBのクエリ結果を簡単に配列形式で取得できます。なお、$addToSetは重複する値を自動的に除外するため、重複を許可してすべての値を配列に格納したい場合は、代わりに$push演算子を使用してください。
-
MongoDBに配列値を保存する方法【insertOne()の使い方を解説】
MongoDBでは、フィールドの値として配列やドキュメントの配列をそのまま保存できます。本記事では、insertOne()メソッドを使って、複数のユーザー情報を含む配列値をコレクションに挿入する手順を解説します。 1. 配列値を含むドキュメントを挿入する まず、配列値を格納したドキュメントを持つコレクションを作成しましょう。以下の例では、demo321というコレクションに、UserDetailsフィールドとしてユーザー情報の配列を保存しています。 > db.demo321.insertOne({UserDetails:[{UserId:101,UserName:Chris},{UserI
-
MongoDBで配列内の個別の値の長さを取得する方法
MongoDBで配列内の個別の値の長さを取得する方法配列から重複しない値(個別の値)を取得するには、MongoDBのdistinct()メソッドを使用します。さらに、取得した結果の長さ(要素数)を知りたい場合は、JavaScriptのlengthプロパティを組み合わせることで簡単に実現できます。この記事では、実際のコレクションを作成しながら、具体的な手順をわかりやすく解説します。1. ドキュメントを含むコレクションを作成するまずは、名前の配列を持つドキュメントを挿入してコレクションを作成します。> db.demo36.insertOne({Names:[Chris,Bob]}); {