node.js - 使用 Mongoose 进行多对多映射

我的设计中有 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 - 从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错

node.js - nodejs mongodb对象ID到字符串

node.js - Mongoose 模式创建

mongodb - Ubuntu 上安装的是什么版本的 MongoDB

mongodb - 在 mongo shell 中将 Mongo 查询输出打印到文件

mongodb - 如何解决错误 :dbpath (/data/db/) does not exis

javascript - Mongoose 中的id和_id有什么区别?

node.js - MongoDB + nodejs : how to query ISODate

python - 如何关闭 mongodb python 连接?