본문 바로가기

오류 관련 해석

findOneAndDelete()와 findOneAndRemove()의 차이

728x90
반응형

질문

(추천 38)

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

 

Query.prototype.findOneAndDelete()
이 함수는 findOneAndRemove() 명령이 MongoDB findAndModify() 명령이 된다는 점에서 Model.findOneAndRemove ()와 약간 다릅니다. 대부분의 mongoose 사용 사례에서 이 구별은 순전히 현학적입니다. 타당한 이유가 없다면 findOneAndDelete()를 사용해야 합니다.
더보기

I am not able to differentiate findOneAndDelete() And findOneAndRemove() in the mongoose documentaion.

 

Query.prototype.findOneAndDelete()

This function differs slightly from Model.findOneAndRemove() in that findOneAndRemove() becomes a MongoDB findAndModify() command, as opposed to a findOneAndDelete() command. For most mongoose use cases, this distinction is purely pedantic. You should use findOneAndDelete() unless you have a good reason not to.

댓글

  1. "타당한 이유가 없다면 findOneAndDelete()를 사용해야 합니다" 어떤 이유 말인가요? - g1ji
  2. findOneAndDelete()는 MongoDB의 findOneAndDelete() 명령을 실행하고, findOneAndRemove()는 MongoDB의 findAndModify() 명령을 실행합니다. -
  3. collection에서 문서를 최종 삭제하면 "findOneAndRemove()가 MongoDB의 findAndModify()를 실행"하는 이유가 무엇입니까? - g1ji
  4. 그리고 그들이 "타당한 이유가 없다면 findOneAndDelete()를 사용해야 합니다"라고 말하는 이유가 궁금합니다. -g1ji
  5. "collection에서 문서를 최종 삭제"하는 것이 아니라, findAndModify 명령과 remove: true 옵션을 사용하여 문서를 collection에서 삭제합니다. - AlexBlex
  6. 그렇다면 어떤 경우든 "findOneAndDelete()"를 사용해야 합니다. - g1ji
  7. findAndModify가 충분하지 않을 때(예를 들면 반환된 문서를 프로젝트하고 싶을 때, 필터에 shard key가 포함되어 있지 않습니다.) 당신은 문서에 대한 링크가 있고, 당신의 필요에 맞는 것을 살펴보고 비교하십시오. (?) - AlexBlex
  8. @AlexBlex의 제안대로, 우리는 둘 중 하나를 사용 사례에 따라 사용할 수 있습니다. 또한 다른 버전과 비교했을 때, findOneAndDelete()가 최신 버전에 도입되었습니다.
  9. 여기

답변 8개

1번 답변

(추천 5)

요약: 타당한 이유가 없다면 findOneAndDelete()를 사용해야 합니다.

 

긴 답변:

findOneAndDelete의 Mongoose 문서:

이 함수는 findOneAndRemove() 명령이 MongoDB findAndModify() 명령이 된다는 점에서 Model.findOneAndRemove ()와 약간 다릅니다. 대부분의 mongoose 사용 사례에서 이 구별은 순전히 현학적입니다. 타당한 이유가 없다면 findOneAndDelete()를 사용해야 합니다.

Mongoose Docs findOneAndDelete

2번 답변

(추천 4)

MongoDB 네이티브 클라이언트(Mongoose는 다름)에서 { remove: true }를 findAndModify로 전달하면 찾은 문서가 삭제됩니다. 이 경우 동작은 findOneAndDelete와 매우 유사합니다. 하지만, 다른 옵션을 사용할 때 몇 가지 차이점이 있습니다.

  • findAndModify는 5개의 파라미터(매개변수)가 필요합니다: query, sort, doc (업데이트 개체), options 및 a callback. findOneAndDelete는 3개의 파라미터(매개변수)만 필요합니다 (filter나 query, options 및 a callback)
  • findAndModify의 options에는 쓰기 문제에 대한 w, wtimeout 및 j가 포함됩니다:

    "MongoDB로부터 쓰기 작업을 위해 독립형 mongod나 복제 세트 또는 분할된 cluster에 요청된 승인 수준" 또는 단순히 쓰기 작업의 성공을 보고하는데 사용할 수 있는 수준을 보장합니다.

    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)

댓글

  1. 저는 이러한 차이점들 중 어떤 것도 실제로 존재하지 않는다고 생각합니다. (1) findOneAndDelete에는 정렬 옵션이 있습니다. (2) findOneAndDelete는 writeConcern 옵션을 사용하지만 문서화되지는 않았습니다. (3) findOneAndDelete는 제거된 문서도 반환합니다.

3번 답변

(추천 3)

findOneAndRemovefindAndModify를 삭제 플래그와 함께 사용한다는 것을 제외하면 둘 다 대체로 비슷합니다. 그리고 업데이트를 수행하기 때문에 findOneAndDelete에 비해 시간 복잡도가 조금 더 높습니다. 삭제는 항상 더 빠릅니다.

댓글

  1. 두 function 모두 wire를 통해 동일한 명령을 MongoDB로 보냅니다. 시간 복잡도에는 차이가 없습니다. - ZachB
  2. Mongoose 문서에서는 동일한 명령을 전송하지 않습니다. mongoosejs.com/docs/api.html#model_Model.findOneAndDelete
    또한 MongoDB 문서도 확인하십시오 : docs.mongodb.com/manual/reference/method/… docs.mongodb.com/manual/reference/method/…
    제 경험에 따르면 많은 양의 데이터를 삭제할 때 findAndModify가 데이터를 반환하기 때문에 이 두 명령어 사이에 지연 시간이 표시됩니다. - 글쓴이
  3. 제 답변을 보십시오. driver가 명령을 변환합니다. 둘 다 데이터를 반환합니다. - ZachB

4번 답변

(추천 2)

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

이 함수는 findOneAndRemove() 명령이 MongoDB findAndModify() 명령이 된다는 점에서 Model.findOneAndRemove ()와 약간 다릅니다. 대부분의 mongoose 사용 사례에서 이 구별은 순전히 현학적입니다. 타당한 이유가 없다면 findOneAndDelete()를 사용해야 합니다.

그에 대한 link : https://mongoosejs.com/docs/api.html#model_Model.findOneAndDelete

댓글

  1. kind 정보에 대해서는 OneAndDelete() 또한 삭제된 문서를 반환합니다.

5번 ZachB의 답변

(추천 1)

여기 있는 다른 답변들은 잘못된 정보가 많이 있습니다. 모든 목적과 용도는 동일하며, findOneAndDelete()를 사용해야 합니다.

 

Mongoose의 Model.findOneAndRemove(query)는 MongoDB의 findAndModify({ query, remove: true })가 됩니다.

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

 

둘 다 같은 선택을 합니다.

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

6번 답변

findOneAndRemove는 삭제된 문서를 반환하므로, 나중에 삭제하지 말아야 하는 문서를 삭제하는 경우 해당 문서를 다시 db에 삽입할 수 있습니다. 문서를 삭제하기 전에 당신의 논리가 올바른지 확인하는 것이 나중에 IMO를 확인하는 것보다 선호됩니다.

 

findOneAndDelete에는 업데이트되는 문서에 영향을 미치는 데 사용할 수 있는 정렬 매개변수(parameter)가 있습니다. 또한, 완료해야 하는 작업을 제어할 수 있는 시간제한(TimeLimit) 매개변수(parameter)도 있습니다.

댓글

  1. 둘 다 삭제된 문서를 반환하고 정렬 매개변수와 시간 제한이 있습니다. - ZachB

7번 답변

mongoose에서 findOneAndDelete와 findOneAndRemove는 동일한 방식으로 동작합니다. 둘 다 JSON에서 그것의 속성(properties)에 의해 객체(object)를 본 다음, 그것을 삭제하고 삭제 후 객체(object)를 한 번 반환합니다. native mongodb를 데이터베이스로 사용하는 경우, findOneAndDelete를 사용하는 것이 유용할 수 있지만 mongoose의 경우 더이상 사용되지 않습니다. 이 기간과 같이 최신 mongoose 및 nodejs 구성을 기반으로 작업을 수행하려면 findOneAndDelete를 사용하는 것이 좋습니다. https://github.com/Automattic/mongoose/issues/6880

댓글

  1. 저는 위 Github Discussion에서 들어왔습니다. DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead. findOneAndRemove는 collection.remove를 사용하고 findOneAndDelete는 (collection.deleteOne 또는 collection.deleteMany)를 사용합니까?

8번 답변

(추천 -1)

저는 findOneAndDelete()를 사용하기를 제안합니다. Mongoose는 ORM을 사용하여 data를 처리할 수 있는 기능들과 데이터베이스에 직접 쓸 수 있는 기능들 모두를 제공하며 findOneAndDelete()가 후자 중 하나입니다. 데이터베이스에 직접 작성하는 것은 middleware 또는 유효성 검사기를 호출하지 않고 잠재적으로 부분적이거나 불완전한 데이터를 데이터베이스에 제출할 위험이 있어 더 위험합니다. 제가 그것이 더 위험하다고 말한 것은, 그것이 완전히 위험하다는 것이 아니라 findOneAndDelete()가 ORM 전체에 걸쳐 안전을 추가한다는 것입니다.

댓글

  1. 둘 다 Mongoose(ORM)를 거치며 동일한 middelware 경고를 가집니다. - ZachB

본문 Difference between findOneAndDelete() and findOneAndRemove() 바로가기

 

728x90
반응형