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

时间:2019-05-16 21:42:09

标签: node.js mongodb mongoose model 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,则一切正常。有什么问题吗?

1 个答案:

答案 0 :(得分:0)

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

// 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来获取相关文档

相关问题