📅  最后修改于: 2023-12-03 15:17:42.808000             🧑  作者: Mango
在 Mongoose 中,可以使用数组包含来嵌套一个文档数组。
在定义模式时,可以在一个字段上使用 []
,将其标记为一个文档数组。例如:
const userSchema = new Schema({
name: String,
emails: [String],
posts: [{
title: String,
comments: [String]
}]
});
这个模式定义了一个 User
文档,其中包含了一个字符串数组 emails
和一个嵌套的文档数组 posts
,每个 post
都包含了一个字符串数组 comments
。
可以使用 push()
方法向数组添加元素。例如:
user.emails.push('user@example.com');
user.posts.push({ title: 'Hello World!', comments: ['Nice post!'] });
这将在 emails
数组中添加一个新元素,并在 posts
数组中添加一个新元素 post
,其中 title
为 Hello World!
,comments
为 ['Nice post!']
。
可以使用 pull()
方法从数组中删除元素。例如:
user.emails.pull('user@example.com');
user.posts.pull({ title: 'Hello World!' });
这将从 emails
数组中删除元素 'user@example.com'
,并从 posts
数组中删除一个 title
为 'Hello World!'
的元素。
可以使用 Mongoose 提供的查询方法来查询包含数组的文档。
可以使用 $elemMatch
来查询数组中包含某个元素的文档。例如:
User.findOne({ emails: { $elemMatch: { $eq: 'user@example.com' } }}, (err, user) => {
console.log(user);
});
这将在 emails
数组中查找一个元素为 'user@example.com'
的文档,并返回它对应的 User
。
可以使用 $size
来查询数组的长度。例如:
User.find({ emails: { $size: 1 }}, (err, users) => {
console.log(users);
});
这将查找所有 emails
数组长度为 1
的 User
。
使用 Mongoose 的数组包含功能可以轻松地嵌套一个文档数组,方便地进行查询和操作。