如何在 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中使用多个模式进行单个集合无法正常工作

如何在django中为问题添加多个表单字段类型的选项?

在 mongodb-native NodeJS 中为每个子进程使用集群的单个连接池与多个连接池

如何在 iOS5 中为单个 UITabItem 添加背景图像?

如何在 MongoDb 中为这样的链接帐户建模?

如何在 Expression Blend 中的单个事件处理程序中为按钮单击添加多个事件?