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 } } )
더 많은 부울 연산과 예제는 여기 에서 찾을 수 있습니다.
참고 : find () 는 문서 일치가 발견 되더라도 컬렉션을 계속 검색하므로 대용량 컬렉션에서 사용하면 비효율적이지만 데이터를 신중하게 모델링하거나 인덱스를 사용하면 find () 의 효율성을 높일 수 있습니다 )
FindOne ()
db.collection.findOne({});
질의 기능은 find ()와 비슷하지만 조건과 일치하는 하나의 문서를 찾은 순간 실행이 끝나고 빈 객체와 함께 사용되면 첫 번째 문서를 가져와 반환합니다. 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";
및 검색어
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')
투영법이있는 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" }
처음 세 개의 문서를 건너 뛰려면 다음과 같이하십시오.
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
이 방법의 조합도 허용됩니다. 예를 들어 첫 번째 1을 건너 뛰는 내림차순 정렬 컬렉션에서 2 개의 문서 가져 오기 :
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" }