返回
Mongoose数组:满足数据库存储需求
前端
2023-09-10 11:09:11
概述
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 数组有了更好的理解,并能够将它们用于您的应用程序。