NoSQLドキュメントデータベースであるMongoDBは、強力なクエリ機能を提供します。このガイドでは、主要なMongoDB演算子に焦点を当て、さまざまなフィールドにまたがる複数の値に一致するドキュメントを効率的に取得するための手法を探ります。
目次
MongoDBクエリの構造を理解する
MongoDBクエリはJSONのようなドキュメントです。クエリのフィールドはドキュメントのフィールドに対応し、値は照合基準を定義します。たとえば、name
フィールドが”John Doe”であるドキュメントを見つけるには:
db.collection.find({ name: "John Doe" })
$in演算子の使用
$in
演算子は、単一フィールドを複数の値に対して効率的に照合します。category
フィールドを持つproducts
コレクションを考えてみましょう。
db.products.find({ category: { $in: ["Electronics", "Clothing"] } })
これにより、「Electronics」または「Clothing」カテゴリの製品が取得されます。
$orによる条件の組み合わせ
$or
演算子は複数の条件を組み合わせます。少なくとも1つの条件が真の場合、ドキュメントは一致する。
“Electronics”または100ドルを超える価格の製品を見つけるには:
db.products.find({
$or: [
{ category: "Electronics" },
{ price: { $gt: 100 } }
]
})
$andによる条件の組み合わせ
$and
演算子は、すべての条件が真である必要があります。「Electronics」カテゴリで50ドル未満の製品を見つけるには:
db.products.find({
$and: [
{ category: "Electronics" },
{ price: { $lt: 50 } }
]
})
多くの場合、$and
は暗黙的です。
db.products.find({ category: "Electronics", price: { $lt: 50 } })
複雑なクエリの構築
高度なクエリのために演算子を組み合わせます。たとえば、「Electronics」または「Clothing」で50ドル未満の製品を見つけます。
db.products.find({
$or: [
{ category: { $in: ["Electronics", "Clothing"] } },
{ price: { $lt: 50 } }
]
})
パフォーマンスの考慮事項
多くの条件を含む$or
を使用すると、パフォーマンスに影響を与える可能性があります。インデックスはクエリの速度を大幅に向上させます。頻繁にクエリされるフィールド(例:category
およびprice
)にインデックスを作成します。
FAQ
- Q:
$in
を複数のフィールドで使用できますか? A: いいえ。複数のフィールドには$or
を使用します。 - Q: 多くの条件を含む
$or
のパフォーマンスへの影響は? A: パフォーマンスが低下する可能性があります。クエリを最適化し、インデックスを使用してください。 - Q:
$or
/$and
の条件には制限がありますか? A: 厳密な制限はありませんが、非常に大きなクエリは非効率です。クエリを簡潔に保ってください。