如何从mongodb中删除文档并更新客户端?

时间:2016-12-29 17:18:05

标签: node.js mongodb mongoose

我遇到以下代码的问题我正在删除用户并将用户列表更新到客户端,因此当我调用api删除用户时,需要一些时间来删除并且我更新的userList呈现的数据包括已删除的用户。如何正确执行删除?

controller.js

    export function destroy(req, res) {
        console.log(req.params.id);
        UserAccess.findOne({
            attuid: req.params.id
        }, function(err, user) {
            if (user) {
                user.remove();
            }
        });
    }

这将返回userLIst

    export function index(req, res) {
        UserAccess.findAsync()
            .then(responseWithResult(res))
            .catch(handleError(res));
    }

index.js

router.get('/', controller.index);
router.delete('/:id', controller.destroy);

3 个答案:

答案 0 :(得分:1)

使用回调函数调用remove(),然后调用usersList

export function destroy(req, res) {
            console.log(req.params.id);
            UserAccess.remove({attuid: req.params.id}, function(err,removed) {
                    if(!err && removed){
                       //call getUsersList function
                    }

            });
     }

答案 1 :(得分:0)

试试这个:

UserAccess.findOne({attuid: req.params.id}).remove().exec();

mongoose.model.findOne会返回一个查询,其中包含remove function

答案 2 :(得分:0)

您可以按照以下方式使用 findOneAndRemove() 方法:

export function destroy(req, res) {
    console.log(req.params.id);
    UserAccess.findOneAndRemove(
        { attuid: req.params.id },           
        function(err, user) {
            console.log(user);
        }
    );
}

当前的实现需要一段时间,因为 remove() 方法是异步的,并且您还没有为该函数提供回调。

findOneAndRemove()

的上述签名
UserAccess.findOneAndRemove(conditions, callback) // executes

将在回传传递后立即执行,否则返回Query对象。

如果您要删除的用户列表,则上述方法将不再有效,因为它只删除符合指定条件的单个文档。您需要 remove() 函数,其中条件使用$in运算符来查询列表,如下例所示:

export function destroy(req, res) {        
    UserAccess.remove(
        { "attuid": { "$in": userList } },           
        function(err, result) {
            console.log(result);
        }
    );
}