sourcecode

findOneAndDelete()와 findOneAndRemove()의 차이

copyscript 2023. 5. 14. 10:58
반응형

findOneAndDelete()와 findOneAndRemove()의 차이

몽구스 문서에서 findOneAndDelete()와 findOneAndRemove()를 구분할 수 없습니다.

쿼리. 프로토타입.하나 찾아서 삭제()

이 함수는 findOneAndDelete() 명령과 달리 findOneAndRemove() 명령이 MongoDB findAndModify() 명령이 된다는 점에서 Model.findOneAndRemove()와 약간 다릅니다.대부분의 몽구스 사용 사례에서 이러한 구분은 순전히 현학적인 것입니다.정당한 이유가 없는 한 findOneAndDelete()를 사용해야 합니다.

TLDR: 정당한 이유가 없는 한 findOneAndDelete()를 사용해야 합니다.


긴 답변:

findOneAndDelete의 Mongoose 문서에서 다음을 찾습니다.

이 함수는 findOneAndDelete() 명령과 달리 findOneAndRemove() 명령이 MongoDB findAndModify() 명령이 된다는 점에서 Model.findOneAndRemove()와 약간 다릅니다.대부분의 몽구스 사용 사례에서 이러한 구분은 순전히 현학적인 것입니다.정당한 이유가 없는 한 findOneAndDelete()를 사용해야 합니다.

Mongoose Docs Find One And Delete

MongoDB에서 기본 클라이언트(Mongoose가 다름) 전달{ remove: true }로.findAndModify발견된 문서를 제거하도록 합니다. 이 경우의 동작은 매우 유사합니다.findOneAndDelete그러나 다른 옵션을 사용할 때는 몇 가지 차이점이 있습니다.

  • findAndModify에는 5개의 매개 변수가 사용됩니다.query,sort,doc(업데이트 개체),options그리고 acallbackFindOneAndDelete는 3개만 사용합니다(filter또는 쿼리,options그리고 acallback)
  • options위해서findAndModify포함하다w,wtimeout그리고.j쓰기 문제에 대해 다음과 같이 설명합니다.

    "MongoDB에서 독립 실행형 mongod, 복제본 세트 또는 샤드 클러스터에 쓰기 작업을 위해 요청한 승인 수준입니다.또는 쓰기 작업의 성공을 보고하는 데 사용할 수 있는 수준을 보장합니다.

    options위해서findOneAndDelete쓰기 관련 구성을 포함하지 않습니다.

  • findAndModify새 문서를 반환하는 동시에 제거할 수 있습니다.

예:

// Simple findAndModify command returning the new document and
  // removing it at the same time
  collection.findAndModify({b:1}, [['b', 1]], {$set:{deleted: Date()}}, {remove:true}, calback)

findOneAndRemove가 findAndModify를 사용하는 것을 제외하고는 둘 다 거의 비슷하며 업데이트를 하고 있기 때문에 findOneAndDelete 플래그와 시간 복잡성은 findOneAndDelete에 비해 조금 더 높습니다.삭제가 항상 더 빠릅니다.

몽구스에서 findOneAndDelete는 findOneAndRemove와 동일한 방식으로 작동합니다.둘 다 JSON에서 속성으로 개체를 찾은 다음 삭제하고 삭제 후 개체를 한 번 반환합니다.네이티브 mongodb를 데이터베이스로 사용할 때 findOneAndDelete가 유용할 수 있지만, mongoose가 사용되지 않는 경우에는 findOneAndDelete를 사용하여 이 기간의 최신 mongoose 및 nodejs 구성을 기반으로 작업을 수행하는 것이 좋습니다.https://github.com/Automattic/mongoose/issues/6880

다음은 정확한 차이입니다(Model.findOneAndDelete() 섹션의 mongoose 문서에서 인용).

"이 함수는 findOneAndRemove() 명령이 findOneAndDelete() 명령과 반대로 MongoDB findAndModify() 명령이 된다는 점에서 Model.findOneAndRemove()와 약간 다릅니다.대부분의 몽구스 사용 사례에서 이러한 구분은 순전히 현학적인 것입니다.정당한 이유가 없는 한 findOneAndDelete()를 사용해야 합니다."

링크는 다음과 같습니다. https://mongoosejs.com/docs/api.html#model_Model.findOneAndDelete

여기 있는 다른 답들은 많은 잘못된 정보를 가지고 있습니다., 그들은모목목같적으며이은, 사합니다야그용해냥당신든것적과를 사용해야 합니다.findOneAndDelete().

Model.findOneAndRemove(query)MongoDB가 .findAndModify({query, remove: true}).

Model.findOneAndDelete()MongoDB가 .findOneAndDelete()"MongoDB"를 변환합니다.findOneAndDelete(query, opts)findAndModify({query, remove: true})(src). 따라서 데이터베이스에서도 동일한 작업을 수행합니다.

둘 다 같은 옵션을 사용합니다.

둘 다 삭제된 문서를 반환합니다.

FindOneAndRemove는 제거된 문서를 반환하므로 나중에 제거되지 않아야 한다고 결정한 문서를 제거한 경우 해당 문서를 다시 DB에 삽입할 수 있습니다.문서를 제거하기 전에 논리가 올바른지 확인한 후 IMO를 확인하는 것이 좋습니다.

findOneAndDelete에는 업데이트되는 문서에 영향을 주는 데 사용할 수 있는 정렬 매개 변수가 있습니다.또한 TimeLimit 매개 변수가 있어 어떤 작업을 완료해야 하는지 제어할 수 있습니다.

findOneAndDelete()를 사용하는 것이 좋습니다.Mongoose는 ORM을 사용하여 데이터를 처리하는 기능과 findOneAndDelete()가 후자 중 하나인 데이터베이스에 직접 쓰는 기능을 모두 제공합니다.데이터베이스에 직접 쓰는 것은 미들웨어나 검증자를 호출하지 않고 일부 또는 불완전한 데이터를 데이터베이스에 제출할 위험이 있기 때문에 더욱 위험합니다.제가 더 위험하다고 말한 것은 완전히 위험하다는 것이 아니라, OneAndDelete()를 찾아서 ORM 전체에 안전을 추가하는 것입니다.

언급URL : https://stackoverflow.com/questions/50602037/difference-between-findoneanddelete-and-findoneandremove

반응형