MongoDB предварительно сохранить установленное поле на основе логики поиска - PullRequest
0 голосов
/ 04 апреля 2020

Люди регистрируются на событие. В базе данных есть две коллекции. Один для новых регистраций и один для регистраций предыдущих лет. Оба содержат поле электронной почты в качестве уникального идентификатора.

Я хотел бы знать, возможно ли проверить, регистрировался ли недавно зарегистрированный человек ранее в предыдущие годы. Если это так, добавьте поле, например: returningCustomer: true. В противном случае добавьте returningCustomer: false

Я использую Mon goose и у меня есть модель User для новых регистраций. У меня нет модели (пока) для ранее зарегистрированных пользователей. Это будет необходимо? Если есть возможность проверить, зарегистрировался ли ранее человек, и можно ли добавить поле перед сохранением, может быть также удобно сразу же сохранить пользователя в коллекции возвращающихся клиентов.

Я знаю, что возможно получить доступ к текущему документу и коллекции с помощью ловушки предварительного сохранения, но как насчет поиска в другой коллекции, написать немного logi c и добавить поле в текущий документ перед сохранением?

userSchema.pre('save', function (doc, next) {
    const exists = otherCollection.find({ email: doc.email });
    exists ? doc.returningCustomer = true : doc.returningCustomer = false;
    next();
});

1 Ответ

0 голосов
/ 06 апреля 2020

У вас должна быть модель для коллекции, которую вы хотите найти.

Затем вы можете запросить другую коллекцию перед сохранением текущей коллекции.

CurrentModel.pre('save', async function (next) {
    const doc = await OtherModel.find({ field: this.field });
    doc.length ? this.returningCustomer = false : this.returningCustomer = true;
    next();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...