📜  mongodb mongoose 推入嵌套数组 (1)

📅  最后修改于: 2023-12-03 14:44:21.777000             🧑  作者: Mango

MongoDB Mongoose 推入嵌套数组

在 MongoDB 中,可以使用嵌套数组存储数据,而通过使用 Mongoose,您可以更轻松地操作和管理这些数据。

添加嵌套数组

在 Mongoose 中,可以使用 push 方法将一个对象添加到嵌套数组中。例如,假设我们有以下数据模型:

const userSchema = new mongoose.Schema({
  name: String,
  emails: [{
    email: String,
    primary: Boolean
  }]
});

const User = mongoose.model('User', userSchema);

要向嵌套数组中添加新对象,我们可以使用以下代码:

const newUser = new User({
  name: 'John Doe',
  emails: []
});

newUser.emails.push({
  email: 'john@example.com',
  primary: true
});

newUser.save();

这将创建一个新的 User 对象,其中 emails 属性是一个空数组。然后,我们调用 push 方法将一个包含电子邮件地址和将其标记为主要电子邮件的对象添加到该数组中。最后,我们通过调用 save 方法将用户保存到数据库中。

更新嵌套数组

要更新嵌套数组中的对象,我们可以使用 findOneAndUpdate 方法。例如,假设我们想要将某个用户的某个电子邮件地址设置为主要地址,我们可以使用以下代码:

User.findOneAndUpdate(
  { name: 'John Doe', 'emails.email': 'john@example.com' },
  { $set: { 'emails.$.primary': true } },
  { new: true },
  (err, user) => {
    if (err) throw err;
    console.log(user);
  }
);

在上面的代码中,我们首先使用过滤器对象匹配用户名为 John Doe 并且拥有电子邮件地址为 john@example.com 的用户。然后,我们使用 $set 操作符将 primary 属性设置为 true。最后,我们使用 new 选项将更新的用户对象返回给回调函数。

删除嵌套数组

要从嵌套数组中删除对象,我们可以使用 $pull 操作符。例如,假设我们要删除某个用户的某个电子邮件地址,我们可以使用以下代码:

User.findOneAndUpdate(
  { name: 'John Doe' },
  { $pull: { emails: { email: 'john@example.com' } } },
  { new: true },
  (err, user) => {
    if (err) throw err;
    console.log(user);
  }
);

在上面的代码中,我们首先使用过滤器对象匹配用户名为 John Doe 的用户。然后,我们使用 $pull 操作符从 emails 数组中删除一个包含电子邮件地址为 john@example.com 的对象。最后,我们使用 new 选项将更新的用户对象返回给回调函数。

结论

在本文中,我们介绍了如何使用 Mongoose 操作 MongoDB 中的嵌套数组。通过使用 pushfindOneAndUpdate$pull 方法,您可以更轻松地管理嵌套数组中的数据。