我的设计中有 FlashcardSchemas 和 PackageSchemas。一个抽认卡可以属于不同的包,一个包可以包含不同的抽认卡。
您可以在下面看到我的 Mongoose 模式定义的精简版:
// 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);
从上面的评论可以看出,这两个schema定义属于不同的文件,相互引用。
我收到一个异常,指出未按预期定义 PackageSchema。如何映射与 mongoose 的多对多关系?
最佳答案
我是 node、mongoDB 和 mongoose 的新手,但我认为正确的做法是:
var PackageSchema = new Schema({
id: ObjectId,
title: { type: String, required: true },
flashcards: [ {type : mongoose.Schema.ObjectId, ref : 'Flashcard'} ]
});
var FlashcardSchema = new Schema({
id: ObjectId,
type: { type: String, default: '' },
story: { type: String, default: '' },
packages: [ {type : mongoose.Schema.ObjectId, ref : 'Package'} ]
});
这样,您只存储对象引用而不是嵌入对象。
https://stackoverflow.com/questions/11117854/
相关文章:
node.js - 从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错
node.js - nodejs mongodb对象ID到字符串
mongodb - Ubuntu 上安装的是什么版本的 MongoDB
mongodb - 在 mongo shell 中将 Mongo 查询输出打印到文件
mongodb - 如何解决错误 :dbpath (/data/db/) does not exis
javascript - Mongoose 中的id和_id有什么区别?