📜  mongoose 数组包含 - Javascript (1)

📅  最后修改于: 2023-12-03 15:17:42.808000             🧑  作者: Mango

Mongoose 数组包含 - Javascript

在 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,其中 titleHello 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 数组长度为 1User

总结

使用 Mongoose 的数组包含功能可以轻松地嵌套一个文档数组,方便地进行查询和操作。