📅  最后修改于: 2023-12-03 14:44:21.777000             🧑  作者: Mango
在 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 中的嵌套数组。通过使用 push
、findOneAndUpdate
和 $pull
方法,您可以更轻松地管理嵌套数组中的数据。