【问题标题】:I want to delete all the item but except of the current user我想删除所有项目,但当前用户除外
【发布时间】:2021-04-04 00:01:51
【问题描述】:

我正在创建一个删除除当前登录用户之外的所有用户的调用。

这是我的代码;

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 是当前用户的id。如您所见,我首先调用 find 查询来过滤不等于 sub 的数据。然后我使用 usersExceptCurrent 作为我的 deleteMany 查询的过滤器。

但它返回状态 400

这是我的 axios 调用;

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('');
        }
    };

【问题讨论】:

  • 尝试注销usersExceptCurrent。它是否给出了预期的结果?

标签: node.js reactjs mongodb express mongoose


【解决方案1】:

使用$ne

$ne 选择字段值不等于指定值的文档。这包括不包含该字段的文档。

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

演示 - https://mongoplayground.net/p/ecMNn4ueZrn


如果你仍然面对_id应该是ObjectId你可以这样做

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

看看!做了什么,在JS中转换为bool值

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

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多