Я работаю над приложением NodeJs и использую пакет узлов mongoose.
Пример кода
Я использую следующий метод для создания динамических коллекций, и эти коллекции иногда не сохраняют данныев базе данных -
const Mongoose = require("mongoose");
const Schema = new Mongoose.Schema({
// schema goes here
});
module.exports = function (suffix) {
if (!suffix || typeof suffix !== "string" || !suffix.trim()) {
throw Error("Invalid suffix provided!");
}
return Mongoose.model("Model", Schema, `collection_${suffix}`);
};
Я использую этот экспортированный модуль для создания динамических коллекций на основе уникальных идентификаторов, переданных в качестве параметра suffix
.Как-то так (пропуская ненужный код) -
const saveData = require("./data-service");
const createModel = require("./db-schema");
// test 1
it("should save data1", function (done) {
const data1 = [];
const response1 = saveData(request1); // here response1.id is "cjmt8litu0000ktvamfipm9qn"
const dbModel1 = createModel(response1.id);
dbModel1.insertMany(data1)
.then(dbResponse1 => {
// assert for count
done();
});
});
// test 2
it("should save data2", function (done) {
const data2 = [];
const response2 = saveData(request2); // here response2.id is "cjmt8lm380006ktvafhesadmo"
const dbModel2 = createModel(response2.id);
dbModel2.insertMany(data2)
.then(dbResponse2 => {
// assert for count
done();
});
});
Проблема
Проблема в том, что тест 2 не пройден!Если API insertmany
приводит к 0 записям, которые не соответствуют количественному утверждению.
Если мы поменяем местами порядок тестов, тест 1 не пройдёт.
Если я выполню два теста по отдельности,оба пройдут.
Если будет n тестов, пройдет только первый тест, а остальные не пройдут.
Выводы
Я подозревал, что mongoose model creation step
будетнеисправен, поскольку он использует то же имя модели, а именно.Model
при создании нескольких экземпляров модели.
Я изменил его на следующий, и тесты отлично работали во всех сценариях -
return Mongoose.model(`Model_${suffix}`, Schema, `collection_${suffix}`);
Вопросы
Это оставляет меня сследующие вопросы -
- Соблюдаю ли я правильные соглашения о кодировании при создании динамических коллекций?
- Является ли подозрительный код фактической причиной этой проблемы (если имя модели также должно быть уникальным)?
- Если да, то почему это не получается?(Я следовал за mongoose docs , но он не предоставляет никакой информации относительно уникальности аргумента имени модели.
Спасибо.