mongoose 시리즈 중 하나 find 조회

find() Model.find(filter[, projection][, options][, callback])
인자 1:filter
조회 조건 은 JSON 문서 의 형식 을 사용 하고 JSON 문서 의 문법 은 MongoDB shell 과 일치 합 니 다.{ field1: value1, field2: { operator: value2 } ... }
1.모두 찾기
Model.find()
Model.find({})

2.정확 한 찾기
Model.find({author:'dora'})

3.조작 부호 사용 하기
대비 연산 자
기호.
묘사 하 다.
$eq
지정 한 값 과 같 습 니 다.
$ne
지정 한 값 과 같 지 않 습 니 다.
$gt
지정 한 값 보다 크다
$gte
지정 한 값 보다 크다
$lt
지정 한 값 보다 작 음
$lte
지정 한 값 보다 작 음
$in
검색 배열 에서 지정 한 값 중 하나 와 일치 합 니 다.
$nin
검색 배열 에서 지정 한 값 중 어느 것 과도 일치 하지 않 습 니 다.
Model.find({ age: { $in: [16, 18]} })
age 필드 는 16 또는 18 의 모든 document 을 되 돌려 줍 니 다.
논리 관련 조작 부호
기호.
묘사 하 다.
$and
배열 에서 지정 한 모든 조건 을 만족 시 킵 니 다.
$nor
배열 에서 지정 한 모든 조건 을 만족 시 키 지 못 합 니 다.
$or
배열 에서 지정 한 조건 중 하 나 를 만족 시 킵 니 다.
$not
반전 조회,지정 한 조건 에 만족 하지 않 는 문 서 를 되 돌려 줍 니 다.
//     
{$and:[ {expression1},{expression2}, ... ,{expressionN} ]}
{$nor:[ {expression1},{expression2}, ... ,{expressionN} ]}
{$or:[ {expression1},{expression2}, ... ,{expressionN} ]}
{field: { $not: {  }}}

논리 연산 자의 비 교 는 필드 가 존재 하지 않 는 상황 을 포함한다.
Model.find( { age: { $not: { $lte: 16 }}})
//    age      16    age           

필드 관련 연산 자
기호.
묘사 하 다.
$exists
지정 한 필드 가 존재 하 는 문서 { field: { $exists: } } 과 일치 합 니 다.
$type
지정 한 형식의 문서 {field: { $type: }} 을 되 돌려 줍 니 다.
4.포 함 된 대상 필드 찾기
데 이 터 는 아래 와 같다.
{
  name: { first: "dora", last: "wang" }
}

정확 한 일치,순서,필드 가 일치 해 야 합 니 다.
Model.find({ name: { last: "wang", first: "dora" } })
// []      

점 문법 을 사용 하면 포 함 된 필드 와 일치 할 수 있 습 니 다.필드 이름 은 따옴표 로 불 러 와 야 합 니 다.
Model.find({ 'name.last': 'wang' })

5.배열 필드 찾기
기호.
묘사 하 다.
$all
검색 배열 에서 지정 한 모든 조건 을 포함 하 는 배열 필드 와 일치 합 니 다.
$elemMatch
일치 하 는 배열 필드 의 한 값 은 $elemMatch 에서 지정 한 모든 조건 을 만족 시 킵 니 다.
$size
배열 필드 와 일치 하 는 length 는 지정 한 크기 와 같은 document 입 니 다.
데 이 터 는 아래 와 같다.
{ year: [ 2018, 2019 ] }
{ year: [ 2017, 2019, 2020 ] }
{ year: [ 2016, 2020 ] }

배열 의 최소 값 찾기
정확 한 검색 쓰기 사용 가능 {field: value}
Model.find({ year: 2019 });
// { "_id" : ..., "year" : [ 2018, 2019 ] }
// { "_id" : ..., "year" : [ 2017, 2019, 2020 ] }

배열 의 여러 값 찾기$all 을 사용 하여 20192020 이 동시에 존재 하 는 document 을 찾 습 니 다.
Model.find({ year: { $all: [ 2019, 2020 ] } });
// { "_id" : ..., "year" : [ 2017, 2019, 2020 ] }

조작 부호 조합 조회
조작 부 호 를 사용 하여 선별 할 수 있 습 니 다.{:{operator: value}},예 를 들 어 $in.
Model.find({ year: { $in: [ 2018, 2020 ] } });
// { "_id" : ..., "year" : [ 2018, 2019 ] }
// { "_id" : ..., "year" : [ 2017, 2019, 2020 ] }

조작 부호 조합 조회 {:{operator1: value1, operator2: value2}}
Model.find({ year: { $gt: 2019, $lt: 2018 } });
// { "_id" : ..., "year" : [ 2017, 2019, 2020 ] }
// { "_id" : ..., "year" : [ 2016, 2020 ] }

배열 필드 는 조회 조건 을 만족 시 키 는 요 소 를 포함 하고 서로 다른 요소 가 각각 조건 을 만족 시 킬 수도 있 고 같은 요소 가 모든 조건 을 만족 시 킬 수도 있다.예 를 들 어 상기 한 값 은 2019 보다 큰 조건 을 만족 시 키 고 다른 값 은 2018 보다 작은 조건 을 만족 시 킬 수 있다.
$elemMatch 단일 필드 값 은 모든 검색 조건 을 만족 시 킵 니 다.$elemMatch 배열 필드 의 값 을 찾 는 동시에 모든 조건 을 만족 시 키 는 document.{field: { $elemMatch: { , , ... }}}
Model.find({ year: { $elemMatch: { $gt: 2016, $lt: 2018 } } })
// { "_id" : ..., "year" : [ 2017, 2019, 2020 ] }

배열 아래 표시 조회
Model.find({ 'year.1': { $gt: 2019 } })
// { "_id" : ..., "year" : [ 2016, 2020 ] }

수조 year 의 두 번 째 값 은 2019 보다 크다.
6.배열 대상 찾기
데 이 터 는 아래 와 같다.
{author: [{name: "dora", age: 18 },{name: "wang", age: 16 }]}

정확 한 조회
정확 한 일치,순서,필드 가 일치 해 야 합 니 다.
Model.find({ author: { name: "dora", age: 18 } })

점 문법 조회
Model.find({ 'author.age': { $gte: 18 } })

$elemMatch 는 모든 검색 조건 을 동시에 만족 시 킵 니 다.
Model.find({ "author": {$elemMatch: {name: 'dora', age:{ $lt: 18 }}})
// []

인자 2:projection
어떤 document 필드 를 포함 하거나 제외 할 지 지정 합 니 다.
mongoose 에 서 는 문자열 지정 과 대상 형식 지정 두 가지 지정 방식 이 있 습 니 다.
문자열 이 지정 되 었 을 때 제 외 된 필드 앞 에 _id 번 을 추가 하고 세그먼트 이름 만 포함 합 니 다.
Model.find({},'age');
Model.find({},'-name');

대상 형식 지정 시 - 은 포함 되 고 1 은 제외 된다.
Model.find({}, { age: 1 });
Model.find({}, { name: 0 });

select()방법 으로 정의 하기
Model.find().select('name age');
Model.find().select({ name: 0 });

매개 변수 3:options
//       
Model.find(filter,null,options)
Model.find(filter).setOptions(options)
Model.find(filter).
0 옵션 은 공식 문서 options 을 보십시오.
  • Query.prototype.setOptions():정렬 규칙 에 따라 주어진 필드 에 따라 순 서 를 매 길 수 있 습 니 다.수 치 는 sort,asc,desc,ascending,descending1 입 니 다.
  • -1:반환 결 과 를 지정 하 는 최대 수량
  • limit:건 너 뛸 문서 의 수량 을 지정 합 니 다
  • skip:lean 이 아 닌 일반 js 대상 으로 돌아 갑 니 다.mongoose 의 특별한 처리 없 이 전단 으로 돌아 가 는 데 이 터 는 일반 js 대상 으로 바 꾸 는 것 이 좋 습 니 다.
  • // sort         
    Model.find().sort('age -name'); //      -    descending   
    Model.find().sort({age:'asc', name:-1});
    Mongoose Documentssort 을 동시에 사용 할 때 호출 순서 가 중요 하지 않 고 돌아 오 는 데 이 터 는 모두 정렬 한 후에 수량 을 제한 합 니 다.
    //     
    Model.find().limit(2).sort('age');
    Model.find().sort('age').limit(2);

    인자 4:callback
    전래
    Mongoose 에 들 어 오 는 모든 조회 의 형식 은 limit 입 니 다.오류 가 발생 하면 callback 은 오류 정보 이 고 callback(error, result)error 이다.조회 에 성공 하면 resultnull 이 고 error 은 조회 결과 이 며 조회 결과 의 구조 형 태 는 조회 방법 에 따라 서로 다른 형식 이 있다.null 방법의 조회 결 과 는 배열 로 내용 을 조회 하지 못 하 더 라 도 result 빈 배열 로 돌아간다.
    전하 지 않다find() 에 들 어가 지 않 을 때 조회 방법 은 [] 인 스 턴 스 를 되 돌려 주 고 인 스 턴 스 는 콜백 원형 의 모든 방법 을 계승 하기 때문에 돌아 오 는 인 스 턴 스 는 다른 방법 을 체인 으로 호출 하여 조회 체인 을 구성 할 수 있다.
    let query = Model.find({ name: 'Dora' });
    
    query.select('name age -_id');

    조회 방법 이 반전 함수 에 들 어가 지 않 을 때 조회 데 이 터 를 얻 는 방식 은 두 가지 가 있 습 니 다.
    1. exec() Query 인 스 턴 스 의 Query 방법 으로 조 회 를 실시 합 니 다.즉,체인 문법 의 마지막 에 query 에 들 어가 조회 데 이 터 를 얻 는 것 입 니 다.
    //     
    Model.find(
      { name: /Dora/, age: { $gte: 16, $lt: 18 } },
      'name age -_id',
      { limit: 2, sort: 'age' },
      (err,res)=>{
        if (err) return handleError(err);
        console.log(res);
      }
    });
    
    let query = Model.
      find({ name: /Dora/ }).
      where('age').gte(16).lt(18).
      select('name age -_id').
      limit(2).sort('age');
    
      query.exec((err, res)=> {
        if (err) return handleError(err);
        console.log(res);
      });

    2. then() exec() 인 스 턴 스 의 callback 방법 으로 조회 체인 을 query 으로 처리 합 니 다.
    query.then(
      (res) => {console.log(res)},
      (err) => {console.log(err)}
    );
    then() 을 사용 하여 조회 결 과 를 얻 습 니 다.
    let res = await query;
    console.log(res);

    findOne() promise
    conditions
    조회 조건 이 async / await 이면 Model.findOne(conditions[, projection][, options][, callback]) 을 사용 하 는 것 을 권장 합 니 다.
    options 옵션 이 제한 되 어 있 습 니 다.
    모든 _id 을 사용 할 수 있 는 것 이 아니 기 때문에 체인 이 findById() 원형 상의 방법 을 호출 할 때 도 사용 가능 한 방법 만 사용 할 수 있다.options 참조.
    result 조회 결과
  • 데 이 터 를 되 돌려 주 는 형식 은 Query 대상 형식 입 니 다.
  • 여러 개의 데이터 가 조회 조건 을 만족 시 키 는 경우 첫 번 째 조 만 되 돌려 줍 니 다.
  • 조회 조건 Query.prototype.setOptions(){},conditions 또는 {} 으로 데 이 터 를 임의로 되 돌려 줍 니 다.
  • 은 조회 조건 에 부합 되 는 데이터 가 없 으 며 nullundefined 으로 되 돌아 갑 니 다.

  • findById() result
    id nullModel.findById(id[, projection][, options][, callback]) 에 해당 한다.
    ?? 정부 에서 발췌 하 다
    다른 점 은 처리 에 있다Model.findById(id)Model.findOne({ _id: id }) 시의 상황.idundefined,임의의 데 이 터 를 되 돌려 줍 니 다.그리고findOne({ _id: undefined })findOne({}),귀환findById(undefined)
    테스트 결 과 는 findOne({ _id: null }) 으로 여전히 null 으로 돌 아 왔 다.따라서 mongoose 버 전의 문제 일 수도 있 지만 데이터 가 정상 으로 돌아 오 더 라 도 findOne({ _id: undefined }) 조 회 는 null 을 사용 하 는 것 을 권장 합 니 다.
    result 조회 결과
  • 데 이 터 를 되 돌려 주 는 형식 은 _id 대상 형식 입 니 다.
  • findById(){} 또는 id 이 고 undefinednull 으로 돌아 갑 니 다.
  • 은 조회 조건 에 부합 되 지 않 은 데 이 터 를 result 으로 되 돌려 줍 니 다.
  • 좋은 웹페이지 즐겨찾기