MongoDB
データのクエリ(入門)
サーチ…
前書き
基本的なクエリの例
検索()
コレクション内のすべてのドキュメントを取得する
db.collection.find({});
条件を使用してコレクション内のドキュメントを取得する(MYSQLのWHEREと同様)
db.collection.find({key: value});
example
db.users.find({email:"[email protected]"});
ブール条件を使用してコレクション内のドキュメントを検索する(クエリ演算子)
//AND
db.collection.find( {
$and: [
{ key: value }, { key: value }
]
})
//OR
db.collection.find( {
$or: [
{ key: value }, { key: value }
]
})
//NOT
db.inventory.find( { key: { $not: value } } )
より多くの論理演算と例がここにあります
注: 見つける()は、(ただし、慎重にあなたのデータをモデル化および/またはインデックスを使用して、あなたが検索の効率を向上させることができ、大規模なコレクションで使用された場合、したがって、それは非効率的である、文書の一致が発見された場合でも、コレクションを検索し続けます)
FindOne()
db.collection.findOne({});
クエリ機能はfind()と似ていますが、これは条件と一致する1つのドキュメントを見つけた瞬間に実行を終了し、空のオブジェクトとともに使用すると、最初のドキュメントをフェッチして返します。 findOne()mongodb api documentation
クエリドキュメント - AND、OR、およびIN条件を使用
students
コレクションからのすべての文書。
> db.students.find().pretty();
{
"_id" : ObjectId("58f29a694117d1b7af126dca"),
"studentNo" : 1,
"firstName" : "Prosen",
"lastName" : "Ghosh",
"age" : 25
}
{
"_id" : ObjectId("58f29a694117d1b7af126dcb"),
"studentNo" : 2,
"firstName" : "Rajib",
"lastName" : "Ghosh",
"age" : 25
}
{
"_id" : ObjectId("58f29a694117d1b7af126dcc"),
"studentNo" : 3,
"firstName" : "Rizve",
"lastName" : "Amin",
"age" : 23
}
{
"_id" : ObjectId("58f29a694117d1b7af126dcd"),
"studentNo" : 4,
"firstName" : "Jabed",
"lastName" : "Bangali",
"age" : 25
}
{
"_id" : ObjectId("58f29a694117d1b7af126dce"),
"studentNo" : 5,
"firstName" : "Gm",
"lastName" : "Anik",
"age" : 23
}
類似の
mySql
上記のコマンドのクエリ。SELECT * FROM students;
db.students.find({firstName:"Prosen"});
{ "_id" : ObjectId("58f2547804951ad51ad206f5"), "studentNo" : "1", "firstName" : "Prosen", "lastName" : "Ghosh", "age" : "23" }
類似の
mySql
上記のコマンドのクエリ。SELECT * FROM students WHERE firstName = "Prosen";
ANDクエリ
db.students.find({
"firstName": "Prosen",
"age": {
"$gte": 23
}
});
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
類似の
mySql
上記のコマンドのクエリ。SELECT * FROM students WHERE firstName = "Prosen" AND age >= 23
またはクエリ
db.students.find({
"$or": [{
"firstName": "Prosen"
}, {
"age": {
"$gte": 23
}
}]
});
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcb"), "studentNo" : 2, "firstName" : "Rajib", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcc"), "studentNo" : 3, "firstName" : "Rizve", "lastName" : "Amin", "age" : 23 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcd"), "studentNo" : 4, "firstName" : "Jabed", "lastName" : "Bangali", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dce"), "studentNo" : 5, "firstName" : "Gm", "lastName" : "Anik", "age" : 23 }
類似の
mySql
上記のコマンドのクエリ。SELECT * FROM students WHERE firstName = "Prosen" OR age >= 23
ORクエリ
db.students.find({
firstName : "Prosen",
$or : [
{age : 23},
{age : 25}
]
});
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
類似のmySql上記のコマンドのクエリ。
SELECT * FROM students WHERE firstName = "Prosen" AND age = 23 OR age = 25;
INクエリこのクエリはORクエリの複数使用を改善できます
db.students.find(lastName:{$in:["Ghosh", "Amin"]})
{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcb"), "studentNo" : 2, "firstName" : "Rajib", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcc"), "studentNo" : 3, "firstName" : "Rizve", "lastName" : "Amin", "age" : 23 }
上のコマンドと同様のmySqlクエリ
select * from students where lastName in ('Ghosh', 'Amin')
Projectionを使ったfind()メソッド
find()
メソッドの基本的な構文は以下の通りです。
> db.COLLECTION_NAME.find({},{KEY:1});
年齢フィールドなしですべての文書を表示する場合は、コマンドは次のようになります
db.people.find({},{age : 0});
すべての文書に年齢フィールドを表示する場合は、コマンドは次のようになります
投影によるFind()メソッド
MongoDBでは、投影とは、文書のデータ全体を選択するのではなく、必要なデータだけを選択することを意味します。
find()
メソッドの基本的な構文は以下の通りです。
> db.COLLECTION_NAME.find({},{KEY:1});
年齢フィールドなしですべての文書を表示する場合は、コマンドは次のようになります
> db.people.find({},{age:0});
年齢フィールドのみを表示する場合は、コマンドは次のようになります
> db.people.find({},{age:1});
注: _id
フィールドは、 find()
メソッドの実行中に常に表示されます。このフィールドが不要な場合は、 0
に設定する必要があります。
> db.people.find({},{name:1,_id:0});
注:フィールドを表示するには1
を使用し、フィールドを非表示にするには0
を使用します。
find()メソッドの結果を制限、スキップ、ソート、カウントする
集計メソッドと同様に、find()メソッドでも、結果を制限、スキップ、並べ替え、カウントすることができます。次のコレクションがあるとしましょう:
db.test.insertMany([
{name:"Any", age:"21", status:"busy"},
{name:"Tony", age:"25", status:"busy"},
{name:"Bobby", age:"28", status:"online"},
{name:"Sonny", age:"28", status:"away"},
{name:"Cher", age:"20", status:"online"}
])
コレクションを一覧表示するには:
db.test.find({})
戻ります:
{ "_id" : ObjectId("592516d7fbd5b591f53237b0"), "name" : "Any", "age" : "21", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b1"), "name" : "Tony", "age" : "25", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b2"), "name" : "Bobby", "age" : "28", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
最初の3つのドキュメントをスキップするには:
db.test.find({}).skip(3)
戻ります:
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
降順をフィールド名でソートするには:
db.test.find({}).sort({ "name" : -1})
戻ります:
{ "_id" : ObjectId("592516d7fbd5b591f53237b1"), "name" : "Tony", "age" : "25", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b2"), "name" : "Bobby", "age" : "28", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b0"), "name" : "Any", "age" : "21", "status" : "busy" }
昇順に並べ替える場合は、-1を1に置き換えます
結果を数えるには:
db.test.find({}).count()
戻ります:
5
また、これらの方法の組合せも可能である。例えば、降順ソートコレクションから2つのドキュメントを取得し、最初の1:
db.test.find({}).sort({ "name" : -1}).skip(1).limit(2)
戻ります:
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }