【问题标题】:Mongoose subdocuments return different ID every timeMongoose 子文档每次返回不同的 ID
【发布时间】:2021-12-26 16:43:30
【问题描述】:

我有一个模型 Franchise,它有另一个 Schema Employee 作为其字段的子文档。结构如下。

Franchise.js

const Franchise = new mongoose.Schema(
    {
        franchiseName: String,
        address: String,
        managers: [Employee]
    });


export default mongoose.model(
    "Franchise",
    Franchise
);

Employee.js

const Employee = new mongoose.Schema(
{
    name: String,
    email: String,
    phoneNo: Number,
    password: String,
});

导出默认员工;

我面临的问题是对 Franchise 的每个查询,它都会为 manager 字段中的对象返回一个新的 _id。有什么办法让它保持不变?

例如,我在 Franchise 上运行一个简单的 findById 并将其存储在 Franchise 变量中。 然后我 console.log(franchise.managers)。

每次运行查询时都会打印不同的 ID。

[
  {
    _id: new ObjectId("61925d2697852574eb0ba9ab"),
    name: 'Franchise Manager 1',
    email: 'franchise1@sfc.com',
    phoneNo: 1234567890,
  }
]

第二次运行查询:

[
  {
    _id: new ObjectId("61925ba8130aca93a7dd3dbc"),
    name: 'Franchise Manager 1',
    email: 'franchise1@sfc.com',
    phoneNo: 1234567890
  }
]

如您所见,员工是相同的,但每次调用都有不同的 ID。请帮忙。 谢谢。

【问题讨论】:

  • 为什么不将 Employee 导出为 mongoose.model
  • @Alghazali505 这样做会导致此错误。 TypeError:无效的架构配置:model 不是数组 managers 中的有效类型。有关有效架构类型的列表,请参阅 mongoosejs.com/docs/guide.html#definition
  • 是的,因为您需要先在 Franchise.js 中导入 Employee 架构。
  • 将 Schema 命名为“FranchiseSchema”、“EmployeeSchema”这样的好习惯
  • @Alghazali505 我正在导入另一个架构。无论如何,我解决了我的问题,谢谢。

标签: mongodb express mongoose mern


【解决方案1】:

好吧,我想通了。问题是数据库中没有存储经理现有数据的_id。 Employee 模式是后来添加的,因此 _id 不仅仅存在于数据库中,因此每次都会生成一个新模式。

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 2023-04-09
    • 2020-11-12
    • 1970-01-01
    • 2018-10-01
    • 2020-09-11
    • 2021-06-18
    • 2020-05-24
    • 2014-11-20
    相关资源
    最近更新 更多