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

问题描述:

我有一个与下面的代码问题我删除用户和更新用户列表到客户端,所以当我调用API删除用户需要一段时间删除和我更新的userList呈现数据包括已删除的用户。如何正确执行删除?如何从mongodb中删除文件并更新客户端?

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

这将返回用户列表

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

index.js

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

调用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 
        } 

      }); 
    } 
+0

我们如何在myBove代码中调用'index'的getUserList函数? – hussain

+0

if(!err && removed){index}(req,res); } –

+0

谢谢你解决了我的问题! – hussain

试试这个:

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

mongoose.model.findOne返回一个查询,它有一个remove function

+0

你怎么不同的第一个答案我的代码有问题? – hussain

+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对象。


如果有用户的列表中删除,然后上面的方法将不再有效,因为它不仅能消除单个文档匹配指定条件。您需要在情况使用$in运营商查询列表,如下面的例子中,remove()功能:

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

如果我们有用户列表销毁?它仍然是一个好方法吗? – hussain

+0

如果你有一个列表,那么你需要使用'remove()'方法,就像更新后的答案一样。 – chridam

+0

我只是询问我们有不同的场景,我们有选择多个用户来删除,如果只有一个用户删除'$ in'将在这种情况下工作? – hussain