如何在 MongoDB 中为单个模型添加 2 个引用?
Posted
技术标签:
【中文标题】如何在 MongoDB 中为单个模型添加 2 个引用?【英文标题】:How do i add 2 references to a single model in MongoDB? 【发布时间】:2018-04-16 17:13:47 【问题描述】:我正在开发一个博客网站(如 Medium),该网站将有一个用户模型、一个博客模型和一个类别模型。基本思想是将用户存储在Users DB中,Blogs DB和Category DB中的所有博客都包含可以发布的不同类型的博客。
我想在 BlogDB 中存储用户(发布博客的人)的引用和博客的类别。我制作的架构如下-
博客架构-
var blogSchema = new mongoose.Schema(
title: String,
content: String,
image: String,
createdAt: Date,
blogCategory :
id:
type : mongoose.Schema.Types.ObjectId,
ref : "Category"
,
author:
id:
type: mongoose.Schema.Types.ObjectId,
ref: "User"
,
username: String
);
用户架构-
var UserSchema = new mongoose.Schema(
firstname: String,
lastname: String,
username: String,
password: String,
email: String );
类别架构-
var categorySchema = new mongoose.Schema(
name : String );
现在,当我在数据库中保存博客时,它会正确存储所有数据,但“blogCategory”字段除外。它甚至没有注册它。甚至不使用该名称创建一个空字段。
不能在一个 Schema 中添加 2 个引用吗?我能在这里做什么?
另外,我对 NodeJS 和 MongoDB 非常陌生。任何建议在这里表示赞赏。请建议我如何实施这个想法,或者我是否应该采取一些不同的方法。谢谢!
【问题讨论】:
【参考方案1】:好的,我花了一点时间来解决, 首先为您的模式创建模型:
For user:
var usermodel = mongoose.model('User',UserSchema).
Note: Pass reference for author as 'User' <first argument in mongoose.model()>.
For blogCategory:
var blogCategorymodel = mongoose.model('Category',cateogrySchema).
Note: Pass reference for blogCategory as 'Category' <first argument in mongoose.model()>.
Now we are left with only the saving stuff:
To Save Them Create instances of each user and blogCategory models:
var newuser = new usermodel(give the details).
var newcateogry = new blogCategorymodel(give the details).
Now create model for your blog:
var blogmodel = mongoose.model('blog',blogSchema).
Now Create instance of your blogmodel:
var newblog = new blogmodel(give the other details,'author.id':newuser._id,'author.username':newuser.username,'blogCategory.id':newcategory._id)
Now Save All Three:
Promise.all([newuser.save(),newcateogry.save(),newblog.save()]).then((result)=>console.log(result))
【讨论】:
以上是关于如何在 MongoDB 中为单个模型添加 2 个引用?的主要内容,如果未能解决你的问题,请参考以下文章
在 mongodb-native NodeJS 中为每个子进程使用集群的单个连接池与多个连接池