mongoose 공부하기 [7] - Queries 함수 정리하기

김진성·2021년 10월 20일
2

MongoDB

목록 보기
7/7
post-thumbnail

Queries

쿼리문은 Django, Spring 등 CRUD 작업과정에 많이 사용된다. Node.js에서도 쿼리문 제공을 통해서 원활한 CRUD가 진행될 수 있도록 하는데 한번 알아보자.

쿼리문 정리

Model.deleteMany()

await Character.deleteMany({name: /Stark/, age: {$get: 18}});

Model.deleteOne()

await Character.deleteOne({name: 'Eddard Stark'});

Model.find()

1. await MyModel.find({});
2. await MyModel.find({name: 'john', age: {$gte: 18}}).exec();
3. MyModel.find({name: 'john', age: {$gte: 18}}, function(err, docs) {});
4. await MyModel.find({name: /john/i}, 'name friends').exec();
5. await MyModel.find({name: /john/i}, null, {skip: 10}).exec()

Model.findById()

await Adventure.findById(id).exec();
Adventure.findById(id, function (err, adventure) {});
await Adventure.findById(id, 'name length').exec();

Model.findByIdAndDelete()

Model.findByIdAndDelete(id, options, callback);

Model.findByIdAndRemove()

Model.findByIdAndRemove(id, options, callback) // executes
Model.findByIdAndRemove(id, options) // return Query
Model.findByIdAndRemove(id, callback) // executes
Model.findByIdAndRemove(id) // returns Query
Model.findByIdAndRemove() // returns Query

Options

  • sort : 많은 Document가 있을 때 조건 문을 통해 순서를 결정함
  • select : document field를 정함
  • rawResult : true면 MongoDB로 부터 raw 데이터를 긁어옴
  • strict : 업데이트의 경우 strict 모드로 덮어씀

Model.findByIdAndUpdate()

A.findByIdAndUpdate(id, update, options, callback) // executes
A.findByIdAndUpdate(id, update, options)  // returns Query
A.findByIdAndUpdate(id, update, callback) // executes
A.findByIdAndUpdate(id, update)           // returns Query
A.findByIdAndUpdate()                     // returns Query

Model.findByIdAndUpdate(id, {name: 'jason bourne'}, options, callback)
Model.findByIdAndUpdate(id, {$set: {name: 'jason bourne'}}, options, callback)

Options

  • new : 수정된 Document는 true이고 초기 default 값은 false
  • upsert : 존재하지 않았던 것을 생성해 업데이트 하면 true, 초기 default false
  • runValidators : 모델 스키마에 반하는 업데이타가 일어날 때 유효화 작업을 진행하면 true
  • setDefaultsOnInsert : default 값은 true 이고 upsert도 true이면 새로운 document가 생성되면 default 값을 적용함
  • sort : 조건에 맞는 많은 docs를 찾을 때 정렬 방법을 정함
  • select : document를 return으로 세팅함
  • rawResult : true이면 mongoDB에서 raw 한 결과를 return 함
  • strict : 업데이트를 통해 스키마의 strict mode로 덮어씀

Model.findOne()

// 조건에 맞는 것만 찾고 나머지는 null 값 처리함
await Adventure.findOne({country: 'Croatia'}).exec();

// callback 사용하는 경우
Adventure.findOne({country: 'Croatia'}, function (err, adventure) {});

// select only the adventures name and length
await Adventure.findOne({country: 'Croatia'}, 'name length').exec();

Model.findOneAndDelete()

A.findOneAndDelete(conditions, options, callback) // executes
A.findOneAndDelete(conditions, options)  // return Query
A.findOneAndDelete(conditions, callback) // executes
A.findOneAndDelete(conditions) // returns Query
A.findOneAndDelete()           // returns Query

Model.findOneAndRemove()

A.findOneAndRemove(conditions, options, callback) // executes
A.findOneAndRemove(conditions, options)  // return Query
A.findOneAndRemove(conditions, callback) // executes
A.findOneAndRemove(conditions) // returns Query
A.findOneAndRemove()           // returns Query

Model.findOneAndReplace()

A.findOneAndReplace(conditions, options, callback) // executes
A.findOneAndReplace(conditions, options)  // return Query
A.findOneAndReplace(conditions, callback) // executes
A.findOneAndReplace(conditions) // returns Query
A.findOneAndReplace()           // returns Query

findOneAndDelete/findOneAndRemove/findOneAndReplace의 Options는 아래와 같다.

Options

  • sort : 조건에 맞는 다양한 document가 발견될 경우, 정렬 순서를 정함
  • maxTimeMS : 쿼리문 작동 시간을 제한함
  • select : document를 return으로 세팅함
  • projection : select와 동일함
  • rawResult : true이면 MongoDB에서 raw한 결과를 반환함
  • strict : 업데이트를 통해 스키마의 strict mode로 덮어씀

Model.findOneAndUpdate()

A.findOneAndUpdate(conditions, update, options, callback) // executes
A.findOneAndUpdate(conditions, update, options)  // returns Query
A.findOneAndUpdate(conditions, update, callback) // executes
A.findOneAndUpdate(conditions, update)           // returns Query
A.findOneAndUpdate()                             // returns Query

const query = { name: 'borne' };
Model.findOneAndUpdate(query, { name: 'jason bourne' }, options, callback)
Model.findOneAndUpdate(query, { $set: { name: 'jason bourne' }}, options, callback)

Options

  • new : 수정된 Document는 true이고 초기 default 값은 false
  • upsert : 존재하지 않았던 것을 생성해 업데이트 하면 true, 초기 default false
  • overwrite : true이면 전체 document를 대체함
  • runValidators : 모델 스키마에 반하는 업데이타가 일어날 때 유효화 작업을 진행하면 true
  • setDefaultsOnInsert : default 값은 true 이고 upsert도 true이면 새로운 document가 생성되면 default 값을 적용함
  • sort : 조건에 맞는 많은 docs를 찾을 때 정렬 방법을 정함
  • select : document를 return으로 세팅함
  • rawResult : true이면 mongoDB에서 raw 한 결과를 return 함
  • strict : 업데이트를 통해 스키마의 strict mode로 덮어씀

Model.replaceOne()

업데이트와 비슷하지만 MongoDB를 제외하고, 주어진 document와 현재 document를 대체한다.

const res = await Person.replaceOne({_id: 24601}, {name: 'Jean Valjean'});
res.n; // 매칭된 document 수
res.nModified;

Model.updateMany()

업데이트와 비슷하지만 MongoDB를 제외하고, multi 옵션 값과 관계 없이 filter를 매칭하는 모든 document를 업데이트 함

const res = await Person.updateMany({name: /Stark$/}, {isDeleted: true});
res.n; // 매칭된 document 수
res.nModified; // 수정된 document 수

Model.updateOne()

update와 비슷하지만 multi/overwrite 옵션 지원 없이 매칭된 첫 번째 document를 업데이트함

const res = await Person.updateOne({ name: 'Jean-Luc Picard' }, { ship: 'USS Enterprise' });
res.n; // 매칭된 document 수
res.nModified; // 수정된 document 수
profile
https://medium.com/@jinsung1048 미디엄으로 이전하였습니다.

0개의 댓글