gpt4 book ai didi

mongodb - Mongoose 错误 - 具有相同模型名称的 Mongoose 模型

转载 作者:可可西里 更新时间:2023-11-01 10:45:48 25 4
gpt4 key购买 nike

我正在开发一个 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 参数传递的唯一 ID 的动态集合。像这样(跳过不必要的代码)-

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 失败了! insertmany API 导致 0 条记录未通过计数断言。

如果我们调换测试顺序,测试 1 将失败。

如果我分别运行这两个测试,它们都会通过。

如果有 n 个测试,只有第一个测试会通过,其余的会失败。


调查结果

我怀疑 mongoose 模型创建步骤 有问题,因为它使用了相同的模型名称,即。 Model 同时创建多个模型实例。

我将其更改为以下并且测试在所有情况下都运行良好 -

return Mongoose.model(`Model_${suffix}`, Schema, `collection_${suffix}`);

问题

这给我留下了以下问题-

  • 我在创建动态集合时是否遵循了正确的编码约定?
  • 可疑代码是否是此问题的实际原因(型号名称也应该是唯一的)?
  • 如果是,为什么会失败? (我关注了 mongoose docs,但它没有提供任何关于模型名称参数唯一性的信息。

谢谢。

最佳答案

我在 dbModel1 上调用了 insertMany 方法,其中变量被声明为 dbModel2。

将测试 2 更改为:

dbModel1.insertMany(data2)
.then(dbResponse1 => {
// assert for count
done()
});

收件人:

dbModel2.insertMany(data2)
.then(dbResponse1 => {
// assert for count
done()
});

关于mongodb - Mongoose 错误 - 具有相同模型名称的 Mongoose 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com