시나리오 설명
레코드를 업데이트해야 하는 경우 먼저 해당 레코드의 이름이 集合Collection
에 이미 있는지 확인하세요(자체 제외).
논리적 방향
1단계: 집합에서 자신 찾기
2단계: 이름에 따라 집합에서 자신 찾기
3단계: Step 1的_id
및 <🎜 판단 > 일치 여부Step 2的_id
4단계: 두 개의 _id가 일치하지 않으면 "이름이 이미 존재합니다"라는 메시지가 표시됩니다. 그렇지 않으면 레코드 업데이트를 완료하세요
과 Step 1的_id
이 일치하지 않는다는 것입니다. Step 2的_id
으아아아
내 생각이 잘못된 것일 수도 있고, 코드에 문제가 있는 것일 수도 있습니다. 전문가에게 조언을 구해야 할 것 같습니다...
당신의 코드를 정리하겠습니다. 솔직히 당신의 코딩 스타일은 별로 마음에 들지 않습니다. 온갖 불필요한 변수 선언으로 인해 코드 표현이 좋지 않기 때문입니다
먼저 req.body를 사용하므로 express를 사용한다고 가정합니다
으아악즉, 게시물 요청에 두 개의 값이 전달됩니다. 하나는 _id이고 다른 하나는 이름입니다. 두 값을 사용하여 각각 데이터베이스를 검색하므로 두 개의 검색 결과( 두 개의 문서), 그리고 _id 검색을 통해 얻은 문서와 이름으로 검색한 문서가 동일한지 비교하려고 합니다(물론 _id를 비교하는 것은 동일한 문서인지 비교하는 것입니다)
귀하가 제공한 조건을 토대로 먼저 귀하가 제공한 req.body의 _id와 이름이 서로 다른 두 문서에서 나온 것인지 추측했습니다. 아니면 데이터베이스에 동일한 이름을 가진 두 개의 문서가 있어서 이름 검색을 통해 얻은 문서와 ID 검색을 통해 얻은 문서가 동일하지 않을 수도 있습니다.
최종 console.log 전에 docById 및 docByName을 인쇄하고 몽구스 구성표를 게시하여 살펴볼 수 있습니다. 이렇게 하면 최소한 어떤 종류의 데이터베이스를 검색하고 있는지 알 수 있습니다.
으아악
이것은 하나의 레코드만 반환하는 findOne을 사용합니다. 아마도 라이브러리에 동일한 이름을 가진 값이 여러 개 있고, 가져온 값이 원하는 값과 다를 수 있습니다.
방법을 찾았습니다.
String()
을 사용하여 1단계에서 얻은 _id를 변환합니다.전체 코드
으아아아