I want to delete all the item but except of the current user

I am creating a call that deletes all the users except the current user logged in.

Here is my code;

exports.deletealluser = async (req, res) => {
    try {
        const { sub } = req.user;

        const usersExceptCurrent = await User.find({ _id: !sub });

        const deletedUsers = await User.deleteMany(usersExceptCurrent);

        res.status(201).json({
            message: 'A all user is successfully deleted!',
            deletedUsers,
        });
    } catch (err) {
        return res.status(400).json({
            message: 'Something went wrong.',
        });
    }
};

sub is the id of the current user. As you can see, I call find query first to filter the data which is not equal to sub. Then I use the usersExceptCurrent as filter to my deleteMany query.

But it returns status 400

And here is my axios call;

const onDelete = async () => {
        try {
            const { data } = await fetchContext.authAxios.delete(
                'admin/delete-all-users'
            );
            fetchContext.setUserList(
                fetchContext.userList.filter((row) => row === data.deletedUsers)
            );
            setSignupSuccess(data.message);
            setSignupError('');
            setOpen(false);
            setOpenAlert(false);
        } catch (err) {
            setIsLoaded(true);
            setError(err);
            const { data } = err.response;
            setSignupError(data.message);
            setSignupSuccess('');
        }
    };

Upvotes: 0

Views: 69

Answers (1)

Use $ne

$ne selects the documents where the value of the field is not equal to the specified value. This includes documents that do not contain the field.

db.collection.find({ _id: { $ne: sub } })

Demo - https://mongoplayground.net/p/ecMNn4ueZrn


If you still face for _id should be ObjectId you can do

const ObjectId = require("mongodb").ObjectId;
db.collection.find({ _id: { $ne: ObjectId(sub) } })

See what ! does, converts to bool value in JS

console.log(!"a");
console.log(!2);

Upvotes: 3

Related Questions