Эта функция удаляет всех пользователей внутри БД, кроме пользователей, чьи имена пользователей находятся внутри массива, однако я хочу реорганизовать его и позволить удалить только тех пользователей, чьи имена пользователей находятся внутри массива. Я использую Mon go DB mon goose с Node.js Express. Вот функция:
const usersToExclude = ["user1", "user2"];
mongoose
.connect(dbConfig.url, {
useNewUrlParser: true
})
.then(conn => getUsersExcept(usersToExclude))
.then(users => deleteUsers(users))
.then(result => {
console.log(result);
})
.catch(err => {
console.log(err);
});
/**
* Get a list of all users except the given users.
* @param {string[]} usernames
*/
function getUsersExcept(usernames) {
return User.find({ username: { $nin: usernames } });
}
/**
* Delete all date realted to given user documents
* @param {Document[]} users
*/
async function deleteUsers(users) {
const ids = users.map(user => user._id);
const chatListDeleteCout = await removeFromChatlist(ids);
const conversationDeleteCount = await getConversations(ids).remove();
const messageDeleteCount = await getMessages(ids).remove();
const usersDeleteCount = await User.find({
username: { $nin: usersToExclude }
}).remove();
}
function removeFromChatlist(ids) {
return User.updateMany(
{ "chatList.receiverId": { $in: ids } },
{
$pull: {
chatList: {
receiverId: { $in: ids }
}
}
}
);
}
/**
* Get details of giver usernames
* @param {string[]} usernames
*/
function getUserIds(usernames) {
return User.find({ username: { $in: usernames } });
}
function getConversations(ids) {
return Conversation.find({
$or: [
{
"participants.receiverId": { $in: ids }
},
{
"participants.senderId": { $in: ids }
}
]
});
}
function getMessages(ids) {
return Message.find({
$or: [
{
"message.senderId": { $in: ids }
},
{
"message.receiverId": { $in: ids }
}
]
});
}
Таким образом, этот скрипт удалит всех пользователей внутри БД и оставит только пользователей user1 и user2. Как я могу заставить этот контроллер удалять только user1 и user2 и оставлять другие в БД?