如何从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
}
});
}
试试这个:
UserAccess.findOne({attuid: req.params.id}).remove().exec();
mongoose.model.findOne
返回一个查询,它有一个remove function。
你怎么不同的第一个答案我的代码有问题? – hussain
对不起,我的意思是代替它,检查更新的答案。 –
可以使用findOneAndRemove()
方法如下:
export function destroy(req, res) {
console.log(req.params.id);
UserAccess.findOneAndRemove(
{ attuid: req.params.id },
function(err, user) {
console.log(user);
}
);
}
当前实现需要一段时间因为remove()
方法是异步的,并且您没有为该函数提供回调。
UserAccess.findOneAndRemove(conditions, callback) // executes
会因为回调立即执行上面签名通过,否则会返回Query
对象。
如果有用户的列表中删除,然后上面的方法将不再有效,因为它不仅能消除单个文档匹配指定条件。您需要在情况使用$in
运营商查询列表,如下面的例子中,remove()
功能:
export function destroy(req, res) {
UserAccess.remove(
{ "attuid": { "$in": userList } },
function(err, result) {
console.log(result);
}
);
}
我们如何在myBove代码中调用'index'的getUserList函数? – hussain
if(!err && removed){index}(req,res); } –
谢谢你解决了我的问题! – hussain