MongoDBの条件付きクエリとソートについて説明します。
findメソッド
クエリの基本形はdb.collection.find({conditions})で、条件はMySQLのWHERE条件と同様に任意で指定します。例は以下の通りです。
// Find all documents
db.collection.find({});
// find the specified conditions of the document
db.collection.find({key: value});
// find users whose nickname is island coder
db.users.find({nickname: 'Island Coder'});
条件付き組み合わせ
組み合わせ条件は、$and, $or, $not を使って設定できます。
// AND query format
db.collection.find({
$and: [
{key1: value1}, {key2: value2}
]
});
// OR query format
db.collection.find({
$or: [
{key1: value1}, {key2: value2}
]
});
// NOT query format
db.collection.find(
{key: {$not: {conditional expression}}
);
例えば、次のようなusersデータセットがあります。
[
{nickname: 'island coder', score: 90, gender: 'male'},
{nickname: 'Mary', score: 98, gender: 'female'},
{nickname: 'Tom', score: 76, gender: 'male'}, {nickname: 'Tom', score: 76, gender: 'male'}
]
スコア90または76のユーザーを検索します。
db.users.find({
$or: [
{score: 90}, {score: 76}
]
});
性別が男性でないユーザーを見つけ、スコアが80以上のユーザーを見つけるため。
db.users.find({
gender: {$not: {$eq: 'male'}}
});
db.users.find({
score: {$not: {$lt: 80}}
});
ここで、$eqは等号条件、$ltは小数条件です。条件は、and と or の入れ子で、for (a || b) && (c || d) のように、以下の形式で使用することができます。
// AND and OR nested query format
db.collection.find({
$and: [
{$or: [{key1: value1}, {key2: value2}]},
{$or: [{key3: value1}, {key4: value2}]},
]
});
//find users whose nickename is Island Coder or Mary and whose score is 90 or 76
db.users.find({
$and: [
{$or: [{nickname: 'island coder'}, {nickname: 'Mary'}]},
{$or: [{score: 90}, {score: 76}]}
]
});
//find users whose nickname is island coder and score is 90, or whose nickname is Mary and score is 76
db.users.find({
$or: [
{$and: [{nickname: 'island coder'}, {score: 90}]},
{$and: [{nickname: 'Mary'}, {score: 76}]}
]
});
//find users whose nickname is island coder and whose score is not lower than 80
db.users.find({
$and: [
{nickname: 'island coder'},
{score: {$not:{$lt: 80}}
]
});
比較演算子
MongoDB では以下の比較演算子が提供されており、 {key: {$op: value}} のような形式になっています。
- eq: 等号演算子、すなわち a == b。
- gt: より大きい、すなわち a > b。
- gte: 大なり小なり、すなわち a > = b。
- lt: 以下、すなわち a < b.
-
lte: 以下、すなわち a < = b.
INクエリ
inクエリのフォーマットは、対応する値が配列であること以外は、比較演算子と同様である、すなわち
db.collection.find({key: {$in: [...]}}) ;
例えば、スコアが90のユーザーを探すには、76。
db.users.find({score: {$in: [76, 90]}});
inクエリは、andクエリなど他の条件と組み合わせることも可能です。
db.users.find({
$and: [
{score: {$in: [76, 90]}},
{gender: 'male'}
]
});
返される結果の数を制限し、データをスキップする
findメソッドは条件に一致するすべてのデータを見つけるので、データセットが大きい場合、非常に遅くなり、多くのディスクI/Oが発生することがあります。
// Find n pieces of data for the document with the specified criteria
db.collection.find({key: value}).limit(n);
// example: query more than 80 points of the three users
db.users.find({score: {$gt: 80}}).limit(3);
// find the specified conditions of the document, skipping the first n data
db.collection.find({key: value}).skip(n);
//example: query users with more than 80 points, skip the first 3
db.users.find({score: {$gt: 80}}).skip(3);
並び替え
ソートには以下の形式を使用しています。
db.collection.find({condition}).sort({key: 1});
ここで、1は昇順、-1は降順を意味します。例えば、分数の降順でソートする必要があります。
db.users.find().sort({score: -1});
概要
今回は、MongoDBの条件付きクエリ操作、返される項目の制限、ソートについて紹介します。ご覧のとおり、MongoDB の操作は SQL とは異なる構文ですが、どれも対応する関数があり、クエリを支援するのに便利です。
以上、MongoDBの条件付きクエリーとソートについて詳しく説明しました。MongoDBの条件付きクエリーとソートについては、スクリプトハウスの他の関連記事も参考にしてみてください
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン