MongoDB에서 삭제할 데이터가 있는 경우 remove()를 사용합니다. 만약 find()에 sort(), limit()이 적용된 값들을 삭제하려면 어떻게 할까요?




# MongoDB 데이터에서 sort() limit() 적용된 값 삭제방법collection에 find()를 사용하면 커서 객체를 반환되며 여기에 sort(), limit()을 적용할 수 있습니다. 하지만 이렇게 찾아낸 결과값을 삭제하는 메소드는 없기때문에 이와 같은 방법으로 삭제할 수는 없겠죠. 그렇다면 다른 방법은 없을까요? 이 경우 toArray()와 map()을 사용하는 방법이 있습니다. 아래에서 알아보세요.


! 배열로 변환 후 변수에 id값을 저장하여 삭제하기반환된 커서객체를 배열로 변환... map()을 사용하여 id값을 모두 반환합니다. 그리고 반환받은 id를 $in 키워드를 사용하여 한번에 삭제하면 원했던 결과를 동일하게 수행할 수 있습니다.


@ id -1로 sorting한 후 skip(100) limit(100) 적용값 삭제
위 예제를 삭제하기 위해 아래처럼 수행합니다.
result = db.collectionName.find().sort({'_id': -1}).skip(100).limit(100).toArray().map(function(doc) { return doc._id; });
// result의 배열값에 _id값을 저장함

db.collectionName.remove({_id: {$in: result}})
// result 배열에 저장된 id값을 찾아 모두 삭제

위 result 변수는 저장된 _id값을 모두 저장하고 아래에서 해당하는 값을 찾아 삭제하는 예제입니다.