【发布时间】:2012-06-22 11:44:23
【问题描述】:
我的设计中有 FlashcardSchemas 和 PackageSchemas。一个抽认卡可以属于不同的包,一个包可以包含不同的抽认卡。
您可以在下面看到我的猫鼬模式定义的精简版:
// package-schema.js
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var PackageSchema = new Schema({
id : ObjectId,
title : { type: String, required: true },
flashcards : [ FlashcardSchema ]
});
var exports = module.exports = mongoose.model('Package', PackageSchema);
// flashcard-schema.js
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var FlashcardSchema = new Schema({
id : ObjectId,
type : { type: String, default: '' },
story : { type: String, default: '' },
packages : [ PackageSchema ]
});
var exports = module.exports = mongoose.model('Flashcard', FlashcardSchema);
从上面的cmets可以看出,这两个schema定义属于不同的文件,相互引用。
我收到一个异常,指出未按预期定义 PackageSchema。如何映射与 mongoose 的多对多关系?
【问题讨论】:
-
没有直接的方法可以做到这一点 - 为什么您将包作为抽认卡模式的一部分,而将抽认卡作为包模式的一部分?您希望运行哪些查询?
-
当我从数据库中拉出一个包时,我想填充卡片数组,当我从数据库中拉出一张卡时,我想查看该卡属于哪些包。如果没有直接的方法来做到这一点,我应该使用第三个模式函数来存储这些关系吗?
-
这里有更新更完整的答案:stackoverflow.com/a/46020968/438970