返回

Mongoose数组:满足数据库存储需求

前端

概述

Mongoose 数组类型是存储一系列值的理想选择。在 MongoDB 中,数组被存储为一个文档中的子文档,类似于关系数据库中的列。Mongoose 数组使用额外的 Mongoose 功能扩展了普通的 JavaScript 数组,因此它可以与其他 Mongoose 类型无缝协作。

创建数组

要创建一个 Mongoose 数组,您需要在模式中定义一个数组字段。例如,假设您有一个带有 tags 数组的 BlogPost 模型骨架:

const mongoose = require('mongoose');

const blogPostSchema = new mongoose.Schema({
  title: String,
  tags: [String]
});

const BlogPost = mongoose.model('BlogPost', blogPostSchema);

上面的模式定义了一个名为 tags 的数组字段,它可以存储一系列字符串。

添加元素

要向 Mongoose 数组中添加元素,您可以使用 push() 方法。例如,以下代码将 "mongodb" 和 "mongoose" 两个标签添加到一个博客文章中:

const blogPost = new BlogPost({
  title: 'My First Blog Post',
  tags: []
});

blogPost.tags.push('mongodb', 'mongoose');

blogPost.save(function (err) {
  if (err) {
    console.error(err);
  } else {
    console.log('Blog post saved successfully!');
  }
});

删除元素

要从 Mongoose 数组中删除元素,您可以使用 pull() 方法。例如,以下代码将 "mongodb" 标签从博客文章中删除:

blogPost.tags.pull('mongodb');

blogPost.save(function (err) {
  if (err) {
    console.error(err);
  } else {
    console.log('Blog post updated successfully!');
  }
});

查询数组

要查询 Mongoose 数组,您可以使用 $in$nin 操作符。例如,以下代码查询包含 "mongodb" 或 "mongoose" 标签的博客文章:

BlogPost.find({
  tags: { $in: ['mongodb', 'mongoose'] }
}, function (err, blogPosts) {
  if (err) {
    console.error(err);
  } else {
    console.log(blogPosts);
  }
});

以下代码查询不包含 "mongodb" 或 "mongoose" 标签的博客文章:

BlogPost.find({
  tags: { $nin: ['mongodb', 'mongoose'] }
}, function (err, blogPosts) {
  if (err) {
    console.error(err);
  } else {
    console.log(blogPosts);
  }
});

使用中间件修改数组

Mongoose 数组可以通过中间件进行修改。例如,以下代码在每次保存博客文章时将所有标签转换为小写:

blogPostSchema.pre('save', function (next) {
  this.tags = this.tags.map(tag => tag.toLowerCase());
  next();
});

结论

Mongoose 数组是存储一系列值的理想选择。它们易于使用,可以与其他 Mongoose 类型无缝协作。通过本指南,您应该对 Mongoose 数组有了更好的理解,并能够将它们用于您的应用程序。