猫鼬:使用 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
获取相关文档
使用猫鼬,如果您定义两个模式:
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
获取相关文档