MongoDB:了解一个人口概念(咬合大小的文章)
#初学者 #node #mongodb #mongoose

介绍

最近,我一直在从事几个 Mern Stack 项目,并且在掌握MongoDB的填充的概念方面经常遇到挑战。这种经历启发了我考虑写一篇文章以阐明该主题。

这个概念本身似乎很简单(也许),但是对于像我这样的人,或者对学习(或等)新手(或等)的人,在现实世界的情况下,理解和应用蒙古多德的人口群体可能会非常困惑。

在本文中,我将仅关注基本概念并简要概述。

我希望本文能够在类似情况下帮助其他人!

了解基本概念

mongodb的填充方法是一种功能,专为在MongoDB数据库中存储的各种 collections 连接相关数据设计。

具体来说,在同一数据库中加入集合特别有用(此概念类似于在关系数据库系统中执行表加入)。

使用填充方法,您可以在单个查询中检索有关相关文档的信息。

Image description

提示:SQL填充?

在许多Web开发项目中,将信息从不同的收藏中传递给另一个收藏品以将其连接起来是很常见的。如前所述,MongoDB可以使用填充方法进行。

但在 sql 数据库中(关系数据库系统),没有特定的方法称为填充。与其填充不同,有几种方法可以在SQL中组合相关数据,例如 JOIN subquery 等。

MongoDB是 nosql db,SQL(基于SQL),自然具有不同的数据处理方法,名称和概念。

在本文中,我不会深入研究NOSQL和SQL之间的差异,但是如果您对此感兴趣,请进行自己的研究。

案例分析

以下是填充方法的基本用法和概述,带有代码示例。

const mongoose = require('mongoose');

// author model

const authorSchema = new mongoose.Schema({
  name: String,
  books: {
    type: mongoose.Schema.Types.ObjectId, // here is type
    ref: 'Book' // 'Book' is the name of the associated collection
  },
});

// book model

const bookSchema = new mongoose.Schema({
  title: String,
  author: {
    type: mongoose.Schema.Types.ObjectId, // here is type
    ref: 'Author'
  }
});

const Author = mongoose.model('Author', authorSchema);
const Book = mongoose.model('Book', bookSchema);

此代码是关于使用Mongoose的DB的模型

为了使用填充量,必须在MongoDB数据模型中的集合之间设置关系。在此示例中,有两个集合,一个集合中的文档包含对另一个集合中的文档的引用。

在上面的示例代码中,有两个集合-AuthorBook。每个文档都有对另一个集合的引用。

让我们聊一个下一个示例。

// retrieving a book by an author with a specific author ID
const authorId = "Author's ObjectId"; // Replace with actual author ID

Author.findById(authorId)
  .populate('books') // 'books' is a field name defined in authorSchema
  .exec((err, author) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log('Author name is: ', author.name);
    console.log("Author's book is: ", author.books); // Author's book has information on related Book documents
  });

此示例代码结合了AuthorBook相关信息,以检索有关特定作者有关的书籍的信息。

此示例使用特定的作者ID在Author Collection中查找作者,并使用填充方法组合书籍字段。这确保了作者的姓名和相关书籍信息在单个查询中检索。

注意:代码中的作者的ObjectId必须替换为实际作者的mongodb文档ID。

Image description

其他

由于本文关注基本概念,因此我认为本文中提供的信息相对简单且简短。但是,现实世界中的项目通常涉及更大的复杂性。

说实话,我并不像这种DB和后端编程那样特别擅长,但是我渴望每天学习一点以变得更好。

我不知道您的情况,但让我们互相尽力而为!