2017-10-16 99 views
1

我是NodeJS.I的新​​手,試圖創建一個api,它將刪除單個go中的多個用戶。我知道如何刪除單個行/用戶,但卻陷入了多個用戶。使用NodeJS刪除數據庫中的多個用戶

這是我做了什麼爲單個用戶

var User = require('../models/User'); 
var moment = require('moment'); 
var jwt = require('jwt-simple'); 
var config = require('../config'); 


function createJWT(user) { 
    var payload = { 
    sub: user._id 
    , iat: moment().unix() 
    , exp: moment().add(14, 'days').unix() 
    }; 
    return jwt.encode(payload, config.TOKEN_SECRET); 
} 

exports.createUser = function (req, res, next) { 
    var user = new User(req.userData); 
    user.save(function (err, result) { 
    if (err) { 
     res.status(500).send({ 
     message: err.message 
     }); 
    } 
    if(result.status == 'unverified') 
     return next(); 
    else 
     res.send({ 
     token: createJWT(result), 
     user : user 
     }); 
    }); 
}; 

exports.removeUser = function(req, res){ 
    User.findById(req.params.id).remove(function(){ 
    res.redirect('/'); 
    }); 
}; 

誰能幫我出這一點。

+0

您可以根據給定的參數數量創建一個循環,然後執行已經使用的查詢(稍微修改tho)。 –

+0

您可以通過刪除數據庫來刪除所有用戶:P但是非常嚴肅的是,如果您想通過ID刪除它們,您應該只使用一個循環並調用該函數來刪除單個用戶。 –

+0

或者使用['User.remove()'](http://mongoosejs.com/docs/api.html#model_Model.remove)實際上在參數中進行查詢。如果那是問題,那麼很久以前就已經回答了。 –

回答

6

有一個簡單的方法來做到it.You可以使用「IN」直接操作的型號

User.remove({'_id':{'$in':[array_of_id]}}) 

注意:您shouln't使用迴路delele,這不是一個好的做法。

Mongoose - Model.remove

+0

如果您可以幫助我,刪除多個用戶的最佳方式 – Catmandu

+1

刪除之前,您可以創建一個需要刪除的user_id數組。如果它取決於某些條件,那麼您可以首先查詢數據庫中的這個列表。這將是輕量級的。 – Sagar

0

通過它的樣子,我猜你正在使用mongoose

無論如何,如果您使用User.remove({_id: req.params.id})其中remove內部的對象是將應用的查詢。 req.params.id是一個user_id數組。

Remove mongo刪除與您的查詢匹配的所有記錄。如果您使用的是使用db.User.remove({})的mongo驅動程序,這也適用。順便說一句根據docs你可以使用deleteMany運行查詢

UPDATE 薩加爾的解決方案是完全正確的。如果您正在尋找到刪除多個ID,你可以使用$in,如果你正在尋找進入刪除在不同屬性的記錄,你可以使用$or查詢

1

假設你有用戶ID的數組說uidArr

第一方法

User.remove({'_id':{'$in':uidArray}}) 

第二方法,使用異步流庫

const async=require('async'); 
async.forEach(uidArray, function (uid, callback) { 
    User.findById(uid).remove(function(err){ 
    err ? callback(err) : callback(null); 
    }); 
    },function(err) { 
    if (err) 
     return res.status(400).send(err); 
    else 
    return res.redirect('/'); 
    }); 
+0

我不認爲你可以傳遞一個數組到req.params,或者至少我不知道如何。您可以將其傳遞到帖子正文,並從req.body.array中檢索它。但是,假設你得到一個數組或用戶標識符,遍歷它來刪除每一個對我來說都是有意義的。 –

+2

Right ..我們無法將數組傳遞給req.params,雖然我們可以通過req.query或req.body ..所以我更新了答案,消除了混淆。 –

相關問題