在Mongoose和ExpressJS中使用引用

时间:2019-02-05 09:19:16

标签: express mongoose reference

由于我已经注意到文档中的深层嵌套数组不是一个好习惯,因此我想在Mongoose中使用ExpressJS使用references。现在,我正在制作一个CMS,其中有用户可以发布的菜单项。每个菜单项都可以包含用户也可以发布的子项。但是我不知道如何使用引用,因此我可以在主要项目集合和子项目集合之间进行引用。

这是我的Main_items猫鼬模型:

var menuItems = new mongoose.Schema({
  title : String,
  subitem: {
    type: mongoose.Types.ObjectId,
    ref: 'sub_items'
  }
}, {collection: 'menu_items'});

module.exports = mongoose.model("menu_items", menuItems);

和sub_items模型:

var subItems = new mongoose.Schema({
  title: String,
});

module.exports = mongoose.model("sub_items", subItems);

主要菜单项的帖子

postController.postMainItems = function(req,res,item){
  var saveData = {
    title : req.body.title
  };
  var data = new item(saveData);
  saveToDB(data,res);
};

我已经为主菜单项创建了一个帖子。这样可行。但是现在我想知道如何发布子项目,以便将它们直接引用到每个主要项目

1 个答案:

答案 0 :(得分:0)

按如下所示更改架构,以便您需要先将main menu插入title,然后将子菜单插入titleparent(_id of parent main menu)

主菜单架构:

var menuItems = new mongoose.Schema({
  title : String
}, {collection: 'menu_items'});

module.exports = mongoose.model("menu_items", menuItems);

子菜单架构:

var subItems = new mongoose.Schema({
  title: String,
  parent: { type: mongoose.Types.ObjectId, ref: 'menu_items'}
});

module.exports = mongoose.model("sub_items", subItems);