В настоящее время я использую Mongoose для производственного проекта, и теперь мы хотим анонимизировать базу данных.Я сделал скрипт, который анонимизирует данные во всей базе данных, но у меня есть проблема.В моих схемах у меня есть несколько полей, которые selected=false
.Например, в моей пользовательской схеме поле password
не выбрано по умолчанию, потому что я не хотел делать запрос find
и возвращать его по ошибке клиенту.
Я делаю следующий шагнезависимо от моей схемы:
- Получить все документы модели:
const documents = await model.find()
- Итерировать по каждому документу:
for (const doc of documents)
- Вызвать функцию наdocument:
const res = await func(doc)
- Сохраните результат:
await res.save()
Поскольку мой сценарий является общим, я получаю модель и функцию из объекта, чтобы иметь возможность легкодобавьте новые коллекции для анонимизации в моем скрипте:
const anonymizeFunctions = [
{
model: models.UserModel,
func: document => {
document.password = 'somePass'
return document
}
},
...
]
В конце это выглядит примерно так:
const anonymizeFunctions = [
{
model: models.UserModel,
func: document => {
document.password = 'somePass'
return document
}
},
...
]
// This function is call with each element of anonymizeFunctions
// with the model and func property of the object
async function anonymizeCollection(model, func) {
const documents = await model.find()
for (const doc of documents) {
const res = await func(doc)
await res.save()
}
}
Моя проблема в том, что find
не выполняется только дляпользователи, но и для всех других моделей, поэтому я не могу model.find().select('+password')
к сожалению.Мне нужно полностью игнорировать инструкции select
и запрос должен вернуть мне все поля модели, несмотря ни на что.