对于猫鼬,如果您定义两个模式:
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,则一切正常。有什么问题吗?
答案 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
来获取相关文档