猫鼬:使用 objectModel.schema 不适用于其他模式中的参数?

Mongoose: Using objectModel.schema doesn't work for parameter in other schema?

使用猫鼬,如果您定义两个模式:

const mongoose = require("mongoose");

const objectAModel = require("/pathTo/objectAModel");

const Schema = mongoose.Schema;

const objectBSchema = new Schema({
  _id: Schema.Types.ObjectId,
  objectAArray: [objectAModel.Schema]
});

module.exports = mongoose.model("objectB", objectBSchema);
const mongoose = require("mongoose");

const objectBModel = require("/pathTo/objectBModel");

const Schema = mongoose.Schema;

const objectASchema = new Schema({
  _id: Schema.Types.ObjectId,
  objectBArray: [objectBModel.Schema]
});

module.exports = mongoose.model("objectB", objectBSchema);

第一个代码工作正常,但第二个代码抛出错误:

TypeError: Invalid value for schema Array path `ObjectBArray`

因此,我无法确定问题所在,因为这两个代码片段是相同的,并且如果我从第二个片段中的 objectBArray 中删除 .schema,一切正常。有什么问题?

问题是你有循环依赖。解决它的方法是创建一个模型到另一个模型的引用,如下所示:

// the schema in objectB.js
const objectBSchema = new Schema({
  _id: Schema.Types.ObjectId,
  objectAArray: [{
     type: Schema.Types.ObjectId,
     ref: "objectA"
  }]
});

module.exports = mongoose.model("objectB", objectBSchema);
// the schema in objectA.js
const objectASchema = new Schema({
  _id: Schema.Types.ObjectId,
  objectBArray: [{
     type: Schema.Types.ObjectId,
     ref: "objectB"
  }]
});

module.exports = mongoose.model("objectA", objectASchema);

请注意,现在您根本不需要将模型导入到其他模型文件中。此外,ref 名称必须与您在 mongoose.model 中为模型命名的名称完全匹配。最后,您将在该数组中存储相关模型的 _id,并且当 运行 查找查询

时,您可以使用 .populate 获取相关文档