MongoDBの第1レベル配列で$elemMatchの代わりに$in演算子を使う方法
MongoDBの第1レベル(トップレベル)の配列に対して条件を指定して検索したい場合、$elemMatchの代わりに$in演算子を使用することで簡単に実現できます。$elemMatchは主にネストされた配列内のドキュメントに対して複数条件を適用するためのものであり、単純な値の一致であれば$inの方が適しています。
基本構文
db.yourCollectionName.find({yourFieldName:{$in:["yourValue"]}}).pretty();コレクションとドキュメントの作成
まずはサンプル用のコレクションにドキュメントを挿入してみましょう。
> db.firstLevelArrayDemo.insertOne({"StudentName":"Chris","StudentTechnicalSkills":["MongoDB","MySQL","SQL Server"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca2360f66324ffac2a7dc71")
}
> db.firstLevelArrayDemo.insertOne({"StudentName":"Robert","StudentTechnicalSkills":["C","Java","C++"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca2362766324ffac2a7dc72")
}この例では、学生名(StudentName)と技術スキル(StudentTechnicalSkills)を持つドキュメントを2件作成しました。
登録済みドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.firstLevelArrayDemo.find().pretty();
実行すると次のような出力が得られます。
{
"_id" : ObjectId("5ca2360f66324ffac2a7dc71"),
"StudentName" : "Chris",
"StudentTechnicalSkills" : [
"MongoDB",
"MySQL",
"SQL Server"
]
}
{
"_id" : ObjectId("5ca2362766324ffac2a7dc72"),
"StudentName" : "Robert",
"StudentTechnicalSkills" : [
"C",
"Java",
"C++"
]
}$in演算子による第1レベル配列の一致検索
それでは、第1レベルの配列に対して値が一致するドキュメントを検索してみましょう。ここでは「MongoDB」というスキルを持つ学生を抽出します。
> db.firstLevelArrayDemo.find({StudentTechnicalSkills:{$in:["MongoDB"]}}).pretty();実行結果は以下の通りです。
{
"_id" : ObjectId("5ca2360f66324ffac2a7dc71"),
"StudentName" : "Chris",
"StudentTechnicalSkills" : [
"MongoDB",
"MySQL",
"SQL Server"
]
}このように、「MongoDB」をスキルとして持つChrisのドキュメントだけが正しく取得できました。$in演算子を使えば、第1レベルの配列に対してもシンプルかつ効率的に条件一致検索を行うことができます。複数の候補値を指定したい場合は、配列の中にカンマ区切りで値を列挙するだけで対応可能です。
-
MongoDBでオブジェクトの配列を検索できますか?
MongoDBでオブジェクト配列を検索する方法はい、MongoDBではオブジェクトの配列を検索することが可能です。集計パイプライン(aggregate())の中で$unwindを使って配列を展開し、$matchで条件に一致する要素を抽出します。ここでは、実際の手順をサンプルコードとともに解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、オブジェクト配列を含むドキュメントをコレクションに登録します。> db.demo623.insertOne( ... { ... _id:1, ... details:
-
MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説
MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic